"SQLSTATE[42000]: Syntax error or access violation: 1064" sur requete préparée UPDATE
Bonjour à tous,
je tente, en vain, d’exécuter une requête préparée de mise à jour et obtient le message :
Citation:
Erreur : SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax.
J'ai beau chercher (par moi-même et sur le net), je ne trouve rien.
Voila mon code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| try
{
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$db = new PDO('mysql:host=localhost;dbname=MaBase', 'Identifiant', 'Password', $pdo_options);
}
catch(Exception $e)
{die('Erreur : '.$e->getMessage());}
$arg = $_POST;
$sql = 'UPDATE :table SET ';
$i = 0;
foreach ($_POST as $cle => $element)
{
if ($cle != 'table' and $cle != 'ID')
{
if ($i>0) {$sql = $sql.', ';}
$sql = $sql.$cle.' = :'.$cle;
$i++;
}
}
$sql = $sql.' WHERE ID=:ID';
unset ($arg['ID']);
$arg['ID'] = intval ($_POST ['ID']);
try
{
$req = $db->prepare($sql);
$nb_update = $req->execute($arg);
echo $nb_update." entry(ies) updated !";
}
catch(Exception $e)
{
echo '<br/>';
echo 'Request : '.$sql;
echo '<br/>Arguments : ';
print_r ($arg);
echo '<br/>';
die('Erreur : '.$e->getMessage());
} |
et j'obtiens donc comme résultat :
Citation:
Request : UPDATE :table SET Name = :Name, Number = :Number WHERE ID=:ID
Arguments : Array ( [table] => Account [Name] => TEST [Number] => test [ID] => 7 )
Erreur : 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 ''Account' SET Name = 'TEST', Number = 'test' WHERE ID='7'' at line 1
Si j’exécute cette requête en mode sauvage (je construit ma requête directement avec mes variables) tout fonctionne :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| [....]
$sql = 'UPDATE '.$_POST['table'].' SET ';
$i = 0;
foreach ($_POST as $cle => $element)
{
if ($cle != 'table' and $cle != 'ID')
{
if ($i>0) {$sql = $sql.', ';}
$sql = $sql.$cle.' = \''.$element.'\'';
$i++;
}
}
$sql = $sql.' WHERE ID='.$_POST['ID'];
$db->query($sql) or die(print_r($req->errorInfo())); |
Si quelqu'un voit le pb, parce-que moi je sèche...
Et si vous avez des remarques sur mon code je les écouterais volontiers, je débute en PHP / MySQL
Merci d'avance !!