Bonjour à tous,

je tente, en vain, d’exécuter une requête préparée de mise à jour et obtient le message :
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 : 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());
 
	}
et j'obtiens donc comme résultat :
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 : 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()));
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 !!