WHERE var =“$ name”AND var =“$ name”

时间:2011-05-04 00:28:09

标签: php mysql

我正在尝试为我的mysql数据库选择故事,其中author变量等于名称列表。

我基本上有一个名单列表,我想用它来确定要讲的故事。

 $names = "name1 name2 name3 name4"

 $get_stories = mysql_query("SELECT * FROM glnce_stories WHERE author = '$names'  ORDER BY id DESC");

我知道这不是正确的方法,但我正在寻找一些解决方案,以便我可以打破这个列表,以便我可以从$names变量中的作者那里得到它

谢谢!

4 个答案:

答案 0 :(得分:3)

如果您无法更改$names变量的格式,则应该有效:

$names = 'name1 name2 name3 name4';
$names = '"' . implode('","', explode(' ', $names)) . '"';

$get_stories = mysql_query('SELECT * FROM glnce_stories WHERE author IN(' . $names . ') ORDER BY id DESC');

答案 1 :(得分:2)

逗号分隔名称然后 使用“WHERE author in(”。$ names。“)”;

答案 2 :(得分:1)

你应该像这样使用WHERE field in (list)

$names = "'name1', 'name2', 'name3', 'name4'";
$get_stories = mysql_query("SELECT * FROM glnce_stories WHERE author in ($names)  ORDER BY id DESC");

因此,您的查询应如下所示:SELECT * FROM glnce_stories WHERE author in ('Bob', 'Steve', 'Andrey', 'Mike', 'Jenna')

重写您的代码如下:

$names = "name1 name2 name3 name4";
$names = "'".implode ("','", array_map('mysql_real_escape_string', explode(' ', $names))."'";
$get_stories = mysql_query("SELECT * FROM glnce_stories WHERE author in ($names)");

答案 3 :(得分:0)

如果您想要懒惰,可以使用FIND_IN_SET()。您只需将名称列表转换为以逗号分隔的字符串:

$names = "name1,name2,name3,name4";
mysql_query("SELECT * FROM stories WHERE FIND_IN_SET(author, '$names')"

这可能比OR条件列表更容易,或者为IN子句准备正确的字符串列表。 (您可以_real_escape_string整个逗号分隔列表,而不是每个名称。)