如何在mysql中使用'IN'创建动态查询

时间:2014-03-04 01:25:41

标签: php mysql dynamic

我想传递一个包含许多用户名的字符串,用逗号分隔,并希望将其传递给查询

   $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')时它才有效,但我需要一个动态的

2 个答案:

答案 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的官方文档:

mysql_real_escape_string

答案 1 :(得分:0)

你可以这样做:

    $namesToCheck = "'" .implode( "','" ,explode( ',' ,$name_list ) ) ."'";

然后使用查询的$namesToCheck子句中的IN

上面的代码会转换:

    kesong,nicholas,jane

到:

    'kesong','nicholas','jane'