繁体   English   中英

使用 PHP 执行多个 MYSQL 查询

[英]Using PHP to execute multiple MYSQL Queries

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

我收到重复的语法错误消息。 我已经尝试了无数次迭代。 代码看起来像我在 PHP 手册和 SO 上的其他 myql 问题中研究过的代码(不包括 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' 附近使用的正确语法

不要一次运行一堆查询。 通常一个人的成功取决于所有其他操作是否正确执行,所以当出现问题时,你不能只是推土机就好像什么都没出错一样。

你可以这样做:

$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的投入不是太大,那么值得考虑切换。

您不能使用query($sql)执行多个 SQL 语句,您必须使用multi_query($sql) 你的脚本将变成这样:

if ($conn->multi_query($sql) === TRUE) 
{
    echo "Table row copied successfully. Do something with it";
} 

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


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

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

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

我收到重复的语法错误消息。 我已经尝试了无数次迭代。 而且代码看起来像是我在PHP手册中研究的代码,以及关于SO的其他myql问题(不包括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服务器版本相对应的手册以在'UPDATE tmp SET id = 100 WHERE id = 1INSERT INTO event_categoriesBU SELECT * FROM t'的第1行附近使用正确的语法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM