Exécuter plusieurs requêtes MYSQL en utilisant PHP
P粉358281574
P粉358281574 2023-10-25 11:41:44
0
1
742

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粉358281574
P粉358281574

répondre à tous(1)
P粉659518294

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

Il convient de noter que si vous investissez trop dans l'AOP que dans

, cela vaut la peine d'envisager de changer. mysqli 更加灵活和适应性强,因此,如果您没有在 mysqli

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal