我已经阅读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
类型。很明显我有一个语法错误(正如它告诉我的那样),但我不确定如何正确构造它。
答案 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
语法,而不是使用循环
要了解如何使用它,请参阅: