0

我已经阅读了使用 WHERE 子句将数组传递给查询,这基本上是我正在做的,但使用字符串而不是整数。我对 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。显然我有一个语法错误(正如它告诉我的那样),但我不确定如何正确构建它。

4

2 回答 2

3

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

要么你想UPDATE,要么你需要放弃WHERE

你到底想完成什么?

于 2012-09-20T17:52:56.343 回答
2

您需要使用UPDATEand notINSERT来更改现有的数据库行。您可以使用像循环这样的循环构造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]
}

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

替代方法:

CASE WHEN ELSE END您可以使用Mysql 中的语法,而不是使用循环。
要知道如何使用它,请参考:

于 2012-09-20T17:59:30.570 回答