我想传递一个包含许多用户名的字符串,用逗号分隔,并希望将其传递给查询
$name_list='kesong,nicholas,jane'; //this value would change
$select_occupy=mysql_query("SELECT * FROM user_data WHERE `username` IN('$name_list') ORDER BY `occupy_date` ");// i think this would just search for a username which is 'kesong,nicholas,jane', instead searching them seperately
echo mysql_num_rows($select_occupy); //would echo 0
我知道只有当你指定IN('$ name1','$ name2','$ name3')时它才有效,但我需要一个动态的
答案 0 :(得分:2)
作为建议,只需将您的名字保存到数组中,如下所示:
$names=array('name1','name2','name3');
$namesToCheck="";
foreach($names as $name){
$namesToCheck.="'$name',";
}
//to remove the last ,
$namesToCheck=substr($namesToCheck,0,-1);
现在,您可以将$namesToCheck
放入IN
查询中。
修改强>
在这个答案中,假设您将阻止任何可能的SQL注入,因为当前的答案只是对您的问题的一个想法。执行阻止SQL注入的最小建议是使用mysql_real_escape_string
函数,它会转义字符串中的特殊字符以用于SQL语句。例如:
$namesToCheck.="'".mysql_real_escape_string($name)."',";
//OR DO THIS ON FINAL STRING
请注意,自PHP 5.5.0起,此扩展程序已弃用。您可以通过以下链接查看PHP的官方文档:
答案 1 :(得分:0)
你可以这样做:
$namesToCheck = "'" .implode( "','" ,explode( ',' ,$name_list ) ) ."'";
然后使用查询的$namesToCheck
子句中的IN
。
上面的代码会转换:
kesong,nicholas,jane
到:
'kesong','nicholas','jane'