国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

使用 PHP 執(zhí)行多個 MYSQL 查詢
P粉358281574
P粉358281574 2023-10-25 11:41:44
[MySQL討論組]

我正在嘗試使用 PHP 運行連續(xù)的 MYSQL 語句,如下面的代碼片段所示(它只是將一行復(fù)制到另一行并通過 tmp 表重命名 id)。

我收到重復(fù)的語法錯誤消息。我已經(jīng)嘗試了無數(shù)次迭代。代碼看起來像我在 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 消息返回:

創(chuàng)建表時出錯:您的 SQL 語法有錯誤;檢查與您的 MariaDB 服務(wù)器版本相對應(yīng)的手冊,了解在第 1 行的“UPDATE tmp SET id=100 WHERE id = 1INSERT INTO event_categoriesBU SELECT * FROM t”附近使用的正確語法

P粉358281574
P粉358281574

全部回復(fù)(1)
P粉659518294

不要一次運行一堆查詢。通常,其中一項操作的成功取決于所有其他操作是否正確執(zhí)行,因此當(dāng)出現(xiàn)問題時,您不能只是像沒有出問題一樣繼續(xù)推進(jìn)。

你可以這樣做:

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

不要忘記啟用異常,以便任何查詢失敗會停止你的進(jìn)程,而不是讓事情失去控制。

使用multi_query的原因是該函數(shù)不支持占位符值。如果您需要在此查詢中引入某種用戶數(shù)據(jù),則需要使用 bind_param 才能安全地執(zhí)行此操作。如果沒有占位符值,您就會面臨 SQL 注入錯誤,其中一個錯誤就足以使您的整個應(yīng)用程序容易受到攻擊。

值得注意的是,PDO 比 mysqli 更加靈活和適應(yīng)性強,因此,如果您沒有在 mysqli 上投入太多,那么值得考慮進(jìn)行切換。

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
關(guān)于我們 免責(zé)申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長!
關(guān)注服務(wù)號 技術(shù)交流群
PHP中文網(wǎng)訂閱號
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://m.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號