คำสั่ง mysql ที่เตรียมไว้: อัปเดตแบบสอบถาม

ฉันกำลังพยายามรันโปรแกรม C โดยใช้ mysql C API เชื่อมต่อกับ mysql ด้วยแบบสอบถามอัปเดต และฉันไม่ได้รับข้อผิดพลาดในการคอมไพล์หรือการเชื่อมโยงใด ๆ แต่แถวไม่ได้รับการอัพเดตในตาราง db

เมื่อฉันรันโค้ดนี้ ฉันได้รับค่าว่างที่อัปเดตใน emp ช่องสถานะ

#define STRING_SIZE 256

char* eStatus,myeStatus;

int myempid,empid;


int i;
for(i = 0; i < 5 ; i++){
const char* sqlQuery = "update employee_info set estatus = ? where empID = ?";
    if (mysql_stmt_prepare(stmt, sqlQuery, strlen(sqlQuery))) {
            fprintf(stderr, " mysql_stmt_prepare(), update failed\n");
            fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
            return -1;
          }

memset(param, 0, sizeof(param)); /* zero the structures */

if (info.state == 2)

      eStatus = "present";

else
      eStatus = "absent";

empid = i;
// Init param structure
            // Select
            param[0].buffer_type = MYSQL_TYPE_STRING;
            param[0].buffer = (void *) &eStatus;
            param[0].buffer_length = STRING_SIZE;
            param[0].is_null = 0;
            param[0].length = &str_length;

            param[1].buffer_type = MYSQL_TYPE_SHORT;
            param[1].buffer = (void *) &myempID;
            param[1].buffer_length = STRING_SIZE;

            param[1].is_null = 0;
            param[1].length = 0;

        myeStatus = eStatus;
    myempid = empid;
               if (mysql_stmt_bind_param(stmt, param) != 0) {
            fprintf(stderr, " mysql_stmt_bind_param() failed\n");
            fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
            return -1;
        }
               /* Execute the statement */
        if (mysql_stmt_execute(stmt)) {
            fprintf(stderr, " mysql_stmt_execute(), failed\n");
            fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
                return -1;
        }

} // end of for loop

สคีมาตารางใน mysql

INT เปล่า(11)

สถานะวาชาร์(10)

ฉันไม่สามารถเข้าใจได้ว่าทำไมสถานะไม่ได้รับการอัพเดตในตาราง mysql ประเภทข้อมูลไม่ตรงกันหรือค่าไม่ได้ผูกกับ sqlquery อย่างถูกต้องหรือไม่
มีเบาะแสอะไรบ้าง ขอบคุณ.


person Kerol Karper    schedule 05.09.2012    source แหล่งที่มา


คำตอบ (2)


คุณสามารถค้นหาได้ที่นี่: การเขียนลงในฐานข้อมูล mysql จาก คอมพิวเตอร์บอร์ดเครื่องเดียวที่ใช้ c ตัวอย่างที่สมบูรณ์เกี่ยวกับวิธีใช้ MYSQL C API เพื่อดำเนินการค้นหา หากคุณยังคงประสบปัญหา โปรดโพสต์โค้ดทั้งหมด

person TOC    schedule 05.09.2012
comment
OP กำลังขอแถลงการณ์ที่เตรียมไว้ มันเกิดขึ้นที่ไหนในตัวอย่างที่คุณเชื่อมโยง? - person Leo; 05.02.2013

เหตุใดคุณจึงพยายามใช้ "โดยที่ empID = ?" หากคุณต้องการให้ทำงานสำหรับพนักงานทุกคน เพียงละเว้นส่วนคำสั่ง Where หากเป็นของพนักงานคนใดคนหนึ่ง รหัสของเขาก็ควรจะอยู่ที่นั่น

อาจมีปัญหาเพิ่มเติม แต่นี่เป็นครั้งแรกที่ฉันพบ

คุณสามารถตรวจสอบได้โดยพยายามดำเนินการค้นหาเดียวกันบนพรอมต์บรรทัดคำสั่ง mysql

แก้ไข: ฉันไม่เห็นการเชื่อมต่อฐานข้อมูลใด ๆ ที่ถูกสร้างขึ้นและข้อมูลใด ๆ ที่เกี่ยวข้องกับเรื่องนั้น สิ่งที่ต้องการ

MYSQL *conn = mysql_init(NULL);

*conn = mysql_real_connect(*conn, DB_HOST, DB_USER, DB_PASS, DB_NAME, 0, NULL, flags);

if (*conn != NULL)
{
    printf("Connection Successfull\n");
    status = 0;
}
person fkl    schedule 05.09.2012
comment
ฉันมีโค้ดการเชื่อมต่อฐานข้อมูลที่เขียนและทดสอบอย่างถูกต้อง...ฉันเขียน Where clause เพราะฉันกำลังอัปเดตหลายแถวสำหรับ empid 0,1,2,3,4 ... และมีสถานะตามลำดับที่ฉันได้รับในค่าคงที่ตัวแปร C .. ตามค่านั้นฉันต้องอัปเดตสถานะ - person Kerol Karper; 05.09.2012
comment
คุณมีคำสั่ง init ที่เรียกว่าหรือไม่? เนื่องจากคุณกำลังใช้คำสั่งที่เตรียมไว้ นั่นก็คือ stmt = mysql_stmt_init(mysql); ก่อนสายอื่น? dev.mysql.com/doc/refman/5.0/ en/mysql-stmt-execute.html - person fkl; 05.09.2012
comment
ใช่.. มีทุกอย่างอยู่... และรหัสเดียวกันทำงานกับแบบสอบถามแบบคงที่เช่น select from table สร้างตาราง ... ทั้งคู่ทำงานอย่างถูกต้อง .... เพียงแค่การอัปเดตนี้ทำให้เกิดปัญหาเนื่องจากฉันต้องผูกค่าเข้ากับแบบสอบถาม แบบไดนามิก - person Kerol Karper; 05.09.2012
comment
@Kerol ดังนั้นคุณหมายถึงความเป็นจริง โดยที่ clause ในกรณีของคุณมี empid = 1 หรือ 2 (ตัวเลขบางตัว) แทนที่จะเป็นเครื่องหมายคำถาม? - person fkl; 05.09.2012
comment
ฟิลด์ param[1] จะผูกค่ากับอันดับที่ 2 '?' ในแบบสอบถามระหว่างการผูกและพารามิเตอร์ [1] จะผูกสถานะไว้ - person Kerol Karper; 05.09.2012