如何在WHERE子句中使用数组值?

时间:2012-09-12 19:40:59

标签: php mysql phpmyadmin

我正在试图弄清楚如何将数组变量与where子句一起使用。

当我回复$ deader时,我得到23,25,43,56,31,24,64,34等等..这些是我想要更新的id号

$sql = mysql_query("UPDATE users SET dead='DEAD' WHERE userID ='(".$deader.")' ");

数组$deader有多个id号值,它只能工作并更新$ deader数组中的第一个id#。

我知道Implode是我需要的,但不知道如何将它变成功能格式。

4 个答案:

答案 0 :(得分:4)

使用WHERE ... IN

$sql = mysql_query("UPDATE users SET dead='DEAD' WHERE userID IN (".$deader.")");

$ deader采用逗号分隔格式。 (例如:$deader = '143, 554, 32'

如果是数组,您可以使用$deader = implode(',', $deader);将其逗号分隔。


注意:  请停止使用mysql_ *函数获取新代码。这些功能不再维护,社区已开始弃用过程。有关将此转换为PDO的更多信息,请参阅此处:How do I convert a dynamically constructed ext/mysql query to a PDO prepared statement?(感谢PeeHaa)

答案 1 :(得分:1)

如果$deader是某种值的字符串,则需要使用MySQL IN()条件。喜欢这个

UPDATE users SET dead = 'DEAD" WHERE userID IN ('?', '?', '?')

?是你的价值观。如果userID为INTEGER字段,则可以省略值周围的单引号,如果是字符串字段,则需要它们。

答案 2 :(得分:0)

我认为你要找的是SQL中的IN关键字。

UPDATE users set dead='DEAD' where userID in (100,101,102)

答案 3 :(得分:-1)

使用MySQLi而不是mysql _ *

require_once('.dbase'); //contains db constants DB_NAME, DB_USER etc
//using PHP built in connection class mysqli

$mysqli = new mysqli(DB_HOST,DB_UNAME,DB_UPWORD,DB_NAME);

if ($mysqli->connect_errno){
    $err = urlencode("Failed to open database connection: ".$mysqli->connect_error);
    header("Location: error.php?err=$err");
exit();
    }
$deader=implode(',',$deader); //assumes array, sting "143,554,32"
if ($stmt = $mysqli->prepare("UPDATE users SET dead='DEAD' WHERE userID IN (?)"){
    //bind variable to statement object
    $stmt->bind_param('s',$deader) //var type[string],var to bind
    //execute query
    $stmt->execute();
    //feedback
    $rowsAffected = $stmt->affected_rows(); //update doesn't return a result set.
    //close statement object
    $stmt->close();
}
$mysqli->close();

你们正在嘲笑Rickos使用mysql_ *但是没有解释如何做到这一点,我的观点只是展示了如何使用mysqli。准备好的声明不是必需的,但是因为你将我的评论标记为(peehaa)而没有将其显示为准备好的声明,所以在此处将其编辑为准备好的声明。它确实回答了他的问题。