モジュールコードに次のステートメントがあります。
db_query("ALTER TABLE {tripletex_invoice} AUTO_INCREMENT = :number", array(':number' => $start_value));
SimpleTest の実行中に、次のエラーメッセージが表示されます。
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).
どうして?
パラメータの置換はWHERE
句でのみ機能し、実行しようとしている種類のクエリでは機能しません。
$start_value
をクエリ文字列に直接挿入する必要があります。その値が信頼できないソースからのものである場合、明らかにそれをサニタイズし、それが正しい境界内にあることを確認する必要があります:
$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);