Comment définir la nouvelle valeur AUTO_INCREMENT?


7

J'ai la déclaration suivante dans mon code de module:

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

Pendant SimpleTest, j'obtiens le message d'erreur suivant:

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).

Pourquoi?

Réponses:


11

Le remplacement de paramètres ne fonctionne que pour les WHEREclauses, il ne fonctionnera pas pour le type de requête que vous essayez d'exécuter.

Vous devez insérer $start_valuedirectement dans la chaîne de requête. Si cette valeur provient d'une source non fiable, vous devez évidemment la désinfecter et vous assurer qu'elle tombe dans les limites correctes vous-même:

$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);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.