使用WHERE子句将PHP数组插入MySQL

时间:2012-09-20 17:49:47

标签: php mysql

我已经阅读Passing an array to a query using a WHERE clause这基本上就是我在做什么,但是使用字符串而不是整数。我遇到WHERE子句的问题。

$codes_imp = "'" . implode("','", $codes) . "'";
$passwords_imp = "'" . implode("','", $passwords) . "'";
$comments_imp = "'" . implode("','", $comments) . "'";

$set_pass_query = "INSERT INTO users (password, comments) VALUES ($passwords_imp, $comments_imp) WHERE Code IN ($codes_imp)";

执行时,查询如下所示:

INSERT INTO users (password, comments) 
VALUES ('password1', 'password2', 'password3', 'comment1', 'comment2', 'comment3') 
WHERE Code IN ('code1', 'code2', 'code3')

表中的所有列都是VARCHAR类型。很明显我有一个语法错误(正如它告诉我的那样),但我不确定如何正确构造它。

2 个答案:

答案 0 :(得分:3)

您正尝试使用INSERT子句约束WHERE查询。这是一个很大的禁忌。

要么UPDATE,要么放弃WHERE

你到底想要完成什么?

答案 1 :(得分:2)

您需要使用UPDATE而不是INSERT来更改现有的数据库行。 您可以使用类似foreach循环的循环结构。 例如:

foreach($codes_imp as $key=>$code){
   $query="UPDATE users SET password='$passwords_imp[$key]', comments='$comments_imp[$key]' WHERE Code='$code'"
   [Code to execute the query goes here]
}

N.B: 我们需要使用循环结构,因为UPDATE查询一次只能在一个数据库行上运行。

替代方法:

您可以在Mysql中使用CASE WHEN ELSE END语法,而不是使用循环 要了解如何使用它,请参阅: