pernyataan yang disiapkan mysql: Perbarui permintaan

Saya mencoba menjalankan program C, menggunakan mysql C API, menghubungkan ke mysql dengan permintaan pembaruan dan saya tidak mendapatkan kesalahan kompilasi atau penautan, tetapi baris tidak diperbarui di tabel db.

Ketika saya menjalankan kode ini saya mendapatkan nilai kosong yang diperbarui di emp. bidang status

#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

Skema tabel di mysql

empid INT(11)

warisan varchar(10)

Saya tidak tahu mengapa status di tabel mysql tidak diperbarui. Apakah tipe datanya tidak cocok, atau nilainya tidak terikat dengan benar ke sqlquery?
Ada petunjuk? Terima kasih.


person Kerol Karper    schedule 05.09.2012    source sumber


Jawaban (2)


Anda dapat menemukannya di sini: Menulis ke database mysql dari komputer papan tunggal menggunakan c contoh lengkap tentang cara menggunakan MYSQL C API untuk melakukan kueri, jika Anda masih mengalami masalah, silakan posting seluruh kode.

person TOC    schedule 05.09.2012
comment
OP meminta pernyataan yang sudah disiapkan. Di mana kemunculannya dalam contoh yang Anda tautkan? - person Leo; 05.02.2013

Mengapa Anda mencoba menggunakan "di mana empID =?". Jika Anda ingin menjalankannya untuk setiap karyawan, hilangkan saja klausa Where. Jika itu untuk karyawan tertentu, maka idnya harus ada di sana.

Mungkin ada lebih banyak masalah, tapi ini adalah masalah pertama yang saya temukan.

Anda dapat memverifikasi dengan mencoba menjalankan kueri yang sama pada prompt baris perintah mysql.

Sunting: Saya juga tidak melihat koneksi database apa pun dibuat dan info apa pun terkait dengannya. Sesuatu seperti

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
Saya memiliki kode koneksi database yang ditulis dan diuji dengan benar...saya menulis klausa Where karena saya memperbarui beberapa baris untuk empid 0,1,2,3,4 ... dan ada status masing-masing yang saya dapatkan dalam konstanta variabel C. .. berdasarkan nilai itu saya harus memperbarui status - person Kerol Karper; 05.09.2012
comment
Apakah Anda memiliki pernyataan init yang disebut? Karena Anda menggunakan pernyataan yang sudah disiapkan, itu adalah stmt = mysql_stmt_init(mysql); sebelum panggilan lainnya? dev.mysql.com/doc/refman/5.0/ en/mysql-stmt-execute.html - person fkl; 05.09.2012
comment
ya..semuanya ada...dan kode yang sama berfungsi dengan kueri statis seperti pilih dari tabel, buat tabel... keduanya berfungsi dengan baik.... hanya pembaruan ini yang memberikan masalah karena saya harus mengikat nilai ke kueri secara dinamis - person Kerol Karper; 05.09.2012
comment
@Kerol jadi maksud Anda klausa Where sebenarnya dalam kasus Anda memiliki empid = 1 atau 2 (angka tertentu) alih-alih tanda tanya? - person fkl; 05.09.2012
comment
bidang param[1] akan mengikat nilai ke '?' ke-2 dalam kueri selama bind dan param[1] akan mengikat estateus ke sana. - person Kerol Karper; 05.09.2012