【问题标题】:Update multiple rows with single query using MySQL and PHP使用 MySQL 和 PHP 通过单个查询更新多行
【发布时间】:2017-11-10 15:56:45
【问题描述】:
<?php
$userData = array();
while (anything to create a loop) {
    $value1 = $result1_from_loop;
    $value2 = $result2_from_loop;
    $value3 = $result3_from_loop;
    $userData[] = '("'.$value1.'", "'.$value2.'", "'.$value3.'")';
} // THIS ENDS THE WHLE OR FOR LOOP

$query = 'INSERT INTO users (data1,data2,data3) VALUES' . implode(',', $userData);
mysql_query($query);
?>

上面的代码非常适合将多条记录插入到表users 中,如上所示,而且速度也非常快。

但是,我尝试在像以前一样循环之后使用相同的方法进行更新。我不知道如何实现这一点。

我想要这样的东西:

<?php
$userData = array();
while (Loop statement) {
    $value1 = $result1_from_loop;
    $value2 = $result2_from_loop;
    $value3 = $result3_from_loop;
    $userData[] = '("'.$value1.'", "'.$value2.'", "'.$value3.'")';
} // This ends the WHLE or FOR loop

$query = 'UPDATE users SET(data1,data2,data3) VALUES' . implode(',',$userData) WHERE data2=$value2
mysql_query($query);

我知道上面的代码并不接近正确,语法甚至是错误的。我只是粘贴它来展示我想要实现的想法。在WHERE 语句中data2 将如何知道每个$value2 的值?

【问题讨论】:

  • 您的 UPDATE 语法不正确。
  • 是的,我知道,这并不意味着正确。我只是把它放在那里以了解我想要做什么。我什至无法更正语法,因为我只知道如何用这种方法编写 INSERT。
  • 您的代码容易受到SQL injection 攻击。您应该通过mysqliPDO 驱动程序使用带有绑定参数的准备好的语句。 This post 有一些很好的例子。
  • @Fred 如果你可以忽略语法,我会告诉我如何使用 $userData[] 中的一个值成功创建 WHERE 语句,我将不胜感激。
  • 你在下面有答案

标签: php mysql database insert


【解决方案1】:

UPDATE 使用与 INSERT 不同的格式。对于 UPDATE,您的代码应如下所示:

$query = 'UPDATE users SET data1 = $userData[0], data2 = $userData[1], data3 = $userData[2] WHERE data2=$value2';

虽然只是作为说明,但不建议使用mysql_query,因为它已被弃用(将在以后的 PHP 版本中完全删除)并且您的代码容易受到 SQL 注入的攻击。至少我建议使用 mysqli_query 并研究使用准备好的语句。

【讨论】:

  • 谢谢,但这并不能解决我的用例。我要做的就是使用与 MYSQL 的单个连接更新多行我尝试了 $update.="update statement" 并且在循环之外我 mysql_query($update) 它没有工作。我不擅长 mysqli,只是想知道是否有办法用 MYSQL 做到这一点,而无需在每个循环中插入/更新每条记录。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-26
  • 2016-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-10
相关资源
最近更新 更多