我正在试图弄清楚如何将数组变量与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是我需要的,但不知道如何将它变成功能格式。
答案 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)而没有将其显示为准备好的声明,所以在此处将其编辑为准备好的声明。它确实回答了他的问题。