Làm cách nào để đặt giá trị AUTO_INCREMENT mới?


7

Tôi có tuyên bố sau trong mã mô-đun của mình:

db_query("ALTER TABLE {tripletex_invoice} AUTO_INCREMENT = :number", array(':number' => $start_value));

Trong SimpleTest tôi nhận được thông báo lỗi sau:

PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 
You have an error in your SQL syntax; check the manual that corresponds 
to your MySQL server version for the right syntax to use near ''20000'' at
line 1: ALTER TABLE {tripletex_invoice} AUTO_INCREMENT = :value; Array ( 
[:value] => 20000 ) in _tripletex_add_invoice_log() (line 1769 of 
/var/www/d7/sites/all/modules/tripletex/tripletex.module).

Tại sao?

Câu trả lời:


11

Thay thế tham số chỉ hoạt động cho WHEREcác mệnh đề, nó sẽ không hoạt động đối với loại truy vấn bạn đang cố chạy.

Bạn cần chèn $start_valuetrực tiếp vào chuỗi truy vấn. Nếu giá trị đó đến từ một nguồn không đáng tin cậy thì rõ ràng bạn cần phải vệ sinh nó và đảm bảo rằng nó nằm trong giới hạn chính xác:

$start_value = (int)$start_value; // Make sure it's an integer

// Do any other checks you need to here (bounds checking, etc.)

// Build the query string and run it
$sql = "ALTER TABLE {tripletex_invoice} AUTO_INCREMENT = $start_value";
db_query($sql);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.