首頁  >  問答  >  主體

使用 PHP 執行多個 MYSQL 查詢

我正在嘗試使用 PHP 運行連續的 MYSQL 語句,如下面的程式碼片段所示(它只是將一行複製到另一行並透過 tmp 表重命名 id)。

我收到重複的語法錯誤訊息。我已經嘗試了無數次迭代。程式碼看起來像我在 PHP 手冊和 SO 上的其他 mysql 問題中研究過的程式碼(不包括 php 維度)。

誰能解釋為什麼我的 php 語法不正確?

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 訊息傳回:

建立表格時發生錯誤:您的SQL 語法有錯誤;檢查與您的MariaDB 伺服器版本相對應的手冊,以了解在第1 行的「UPDATE tmp SET id=100 WHERE id = 1INSERT INTO event_categoriesBU SELECT * FROM t ”附近使用的正確語法

P粉358281574P粉358281574381 天前718

全部回覆(1)我來回復

  • P粉659518294

    P粉6595182942023-10-26 10:17:07

    不要一次執行一堆查詢。通常,其中一項操作的成功取決於所有其他操作是否正確執行,因此當出現問題時,您不能只是像沒有出問題一樣繼續前進。

    你可以這樣做:

    $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 上投入太多,那麼值得考慮進行切換。 < /p>

    回覆
    0
  • 取消回覆