Bonjour à tous,
je tente, en vain, d’exécuter une requête préparée de mise à jour et obtient le message :
J'ai beau chercher (par moi-même et sur le net), je ne trouve rien.Erreur : SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax.
Voila mon code :
et j'obtiens donc comme résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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()); }
Si j’exécute cette requête en mode sauvage (je construit ma requête directement avec mes variables) tout fonctionne :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 quelqu'un voit le pb, parce-que moi je sèche...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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()));
Et si vous avez des remarques sur mon code je les écouterais volontiers, je débute en PHP / MySQL
Merci d'avance !!
Partager