首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用PHP执行多个MYSQL查询

使用PHP执行多个MYSQL查询
EN

Stack Overflow用户
提问于 2018-05-05 15:09:52
回答 2查看 10.1K关注 0票数 4

我试图使用PHP运行连续的MYSQL语句,如下面的代码片段所示(它只是将一行复制到另一行,并通过tmp表重命名id )。

我得到了一条重复的语法错误消息。我尝试过多次迭代。代码看起来像我在PHP手册和其他myql问题中研究过的代码(不包括php维度)。

有人能解释一下为什么我的php语法不正确吗?

代码语言:javascript
运行
复制
 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,其中id =1 1INSERT到event_categoriesBU SELECT * FROM”的正确语法

EN

回答 2

Stack Overflow用户

发布于 2018-05-05 15:20:40

不要一次运行一堆查询。通常情况下,一个手术的成功取决于所有其他操作的正确执行,所以你不能就像推土机一样在有问题的时候没有出什么问题。

你可以这样做:

代码语言:javascript
运行
复制
$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注入错误中,其中一个错误就足以使整个应用程序容易受到攻击。

值得注意的是,与mysqli相比,PDO具有更大的灵活性和适应性,因此,如果您在mysqli上的投资不太大,就值得考虑切换。

票数 10
EN

Stack Overflow用户

发布于 2018-05-05 15:15:29

不能使用query($sql)执行多个SQL语句,必须使用multi_query($sql)。然后,您的脚本将变成如下所示:

代码语言:javascript
运行
复制
if ($conn->multi_query($sql) === TRUE) 
{
    echo "Table row copied successfully. Do something with it";
} 

有关完整的示例,请参阅文档

但是,请注意,正如其他用户在注释中解释的那样,使用此方法同时执行多个查询可能是潜在的危险,应尽可能避免,特别是在处理用户输入时。

如果一次执行一个查询并检查其结果,而不是将所有查询分组在一个调用中,则可以更好地控制执行流。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50190903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档