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


How can I use array values in WHERE clauses?

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

当我回声$deader时,我得到23,25,43,56,31,24,64,34,等等。。这些是我想要的身份证号码更新

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

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

我读到Impode正是我所需要的,但不知道如何将其转换为函数格式。

使用WHERE ... IN

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

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

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


注意:请停止对新代码使用mysql_*函数。这些功能不再得到维护,社区已经开始了弃用过程。有关将其转换为PDO的更多信息,请参阅此处:如何将动态构建的ext/mysql查询转换为PDO-prepared语句?(感谢PeeHaa)

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

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

其中?是您的价值观。如果userID是INTEGER字段,则可以省略值周围的单引号;如果是字符串字段,则需要这些值。

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

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

使用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();

你们在抨击里克斯使用mysql_*,但没有解释如何使用,我的观点只是简单地展示如何使用mysqli。事先准备好的声明是不必要的,但由于您标记了我的评论(peehaa),因为它没有显示为事先准备好声明,因此在这里它被编辑为事先准备的声明。它确实回答了他的问题。