Führen Sie mehrere MYSQL-Abfragen mit PHP aus
P粉358281574
P粉358281574 2023-10-25 11:41:44
0
1
743

Ich versuche, aufeinanderfolgende MYSQL-Anweisungen mit PHP auszuführen, wie im Codeausschnitt unten gezeigt (es kopiert einfach eine Zeile in eine andere und benennt die IDs über die tmp-Tabelle um).

Ich erhalte doppelte Syntaxfehlermeldungen. Ich habe unzählige Iterationen ausprobiert. Der Code sieht aus wie der Code, den ich im PHP-Handbuch und anderen MySQL-Fragen zu SO studiert habe (mit Ausnahme der PHP-Dimension).

Kann jemand erklären, warum meine PHP-Syntax falsch ist?

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
 }

PHP-Nachrichtenrückgabe:

Fehler beim Erstellen der Tabelle: Es liegt ein Fehler in Ihrer SQL-Syntax vor. Überprüfen Sie im Handbuch für Ihre MariaDB-Serverversion die Zeile 1 in der Nähe von „UPDATE tmp SET id=100 WHERE id = 1INSERT INTO event_categoriesBU SELECT * FROM t“. Korrekte Syntax zur Verwendung

P粉358281574
P粉358281574

Antworte allen(1)
P粉659518294

不要一次运行一堆查询。通常,其中一项操作的成功取决于所有其他操作是否正确执行,因此当出现问题时,您不能只是像没有出问题一样继续推进。

你可以这样做:

$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();
}

不要忘记启用异常,以便任何查询失败会停止你的进程,而不是让事情失去控制。

使用multi_query的原因是该函数不支持占位符值。如果您需要在此查询中引入某种用户数据,则需要使用 bind_param 才能安全地执行此操作。如果没有占位符值,您就会面临 SQL 注入错误,其中一个错误就足以使您的整个应用程序容易受到攻击。

值得注意的是,PDO 比 mysqli 更加灵活和适应性强,因此,如果您没有在 mysqli 上投入太多,那么值得考虑进行切换。

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage