Maison > Questions et réponses > le corps du texte
J'essaie d'exécuter des instructions MYSQL consécutives en utilisant PHP comme indiqué dans l'extrait de code ci-dessous (il copie simplement une ligne sur une autre et renomme les identifiants via la table tmp).
Je reçois des messages d'erreur de syntaxe en double. J'ai essayé d'innombrables itérations. Le code ressemble au code que j'ai étudié dans le manuel PHP et d'autres questions MySQL sur SO (à l'exclusion de la dimension php).
Quelqu'un peut-il expliquer pourquoi ma syntaxe php est incorrecte ?
include("databaseconnect.php");// This obviously works. Used a zillion time $sql ="CREATE TEMPORARY TABLE tmp SELECT * FROM event_categoriesBU WHERE id = 1;"; $sql.="UPDATE tmp SET id=100 WHERE id = 1;"; $sql.="INSERT INTO event_categoriesBU SELECT * FROM tmp WHERE id = 100;"; if ($conn->query($sql) === TRUE) { echo "Table row copied successfully. Do something with it"; } else { echo "Error creating table: " . $conn->error; //close connection etc }
Retour du message PHP :
Erreur lors de la création de la table : il y a une erreur dans votre syntaxe SQL ; consultez le manuel de la version de votre serveur MariaDB pour la ligne 1 près de "UPDATE tmp SET id=100 WHERE id = 1INSERT INTO event_categoriesBU SELECT * FROM t" Corriger la syntaxe à utiliser
P粉6595182942023-10-26 10:17:07
N’exécutez pas plusieurs requêtes à la fois. Souvent, le succès d'une de ces opérations dépend de la bonne exécution de toutes les autres opérations. Ainsi, lorsque quelque chose ne va pas, vous ne pouvez pas continuer comme si de rien n'était.
Vous pouvez faire ceci :
$queries = [ "CREATE TEMPORARY TABLE tmp SELECT * FROM event_categoriesBU WHERE id = 1", "UPDATE tmp SET id=100 WHERE id = 1", "INSERT INTO event_categoriesBU SELECT * FROM tmp WHERE id = 100" ]; foreach ($query as $query) { $stmt = $conn->prepare($query); $stmt->execute(); }
N'oubliez pas d'activer les exceptions afin que tout échec de requête arrête votre processus plutôt que de laisser les choses devenir incontrôlables.
Vous n'utilisez pas pour le faire en toute sécurité. Sans valeurs d'espace réservé, vous êtes exposé à des erreurs d'injection SQL, dont une suffit à rendre l'ensemble de votre application vulnérable. multi_query
的原因是该函数不支持占位符值。如果您需要在此查询中引入某种用户数据,则需要使用 bind_param
, cela vaut la peine d'envisager de changer. mysqli
更加灵活和适应性强,因此,如果您没有在 mysqli