mysql WHERE IN数组字符串/用户名

时间:2011-07-07 21:57:04

标签: php mysql arrays

代码:

$friendsArray = array("zac1987", "peter", "micellelimmeizheng1152013142");
$friendsArray2 = join(', ',$friendsArray);  
$query120 = "SELECT picturemedium FROM users WHERE username IN ('$friendsArray2')";
echo $query120;

这是输出:

SELECT picturemedium FROM users WHERE username IN ('zac1987, peter, micellelimmeizheng1152013142')

它失败了,因为用户名没有包含单引号,如' zac1987',' peter','鼠标......'。如何用单引号包装每个用户名?

5 个答案:

答案 0 :(得分:12)

让我们逐个遍历每个名​​称,逐个转义。

我将建议您使用实际的MySQL转义函数,而不是仅仅包装引号,以确保数据实际上正确地进入查询。 (否则,如果我输入了It's me!之类的名称,单引号会弄乱查询。)我将在这里假设你正在使用PDO(你应该这样做!),但是如果没有,请将PDO::quote的引用替换为mysql_real_escape_string

foreach($friendsArray as $key => $friend) {
  $friendsArray[$key] = PDO::quote($friend);
}

$friendsArray2 = join(', ', $friendsArray);

答案 1 :(得分:9)

如果您不想使用PDO或其他复杂的解决方案,请使用内爆功能,并且您已经完成了设置。

$friendsArray  = array("zac1987", "peter", "micellelimmeizheng1152013142");
$friendsArray2 = "'" .implode("','", $friendsArray  ) . "'"; 
$query120      = "SELECT picturemedium FROM users WHERE username IN ( $friendsArray2 )";
echo $query120;

解决方案:我刚刚$friendArray ','推翻了SELECT picturemedium FROM users WHERE username IN ('zac1987','peter','micellelimmeizheng1152013142')。干净利落!并且它正在工作。

输出: {{1}}

答案 2 :(得分:8)

如果你只有数字,一切都很容易。但是如果你有字符串,你需要检查引号并小心..如果你不想使用PDO或“mysql_real_escape_string”,下面的代码就可以了。我测试过,效果很好。

$friendsArray = array("zac1987", "peter", "micellelimmeizheng1152013142");
$friendsArray2 = '"' . implode('","', $friendsArray) . '"';
$query120 = "SELECT picturemedium FROM users WHERE username IN ($friendsArray2)";
echo $query120;

答案 3 :(得分:6)

在Google上发现了这个问题,并通过这样做找到了解决方案。不确定这个解决方案是多么“合适”,但它对我有用。

    $friendsArray = array("zac1987", "peter", "micellelimmeizheng1152013142");
    $friendsArray2 = "'" . join(', ',$friendsArray) . "'";  
    $query120 = "SELECT picturemedium FROM users WHERE username IN ($friendsArray2)";
    echo $query120;

答案 4 :(得分:0)

只需做一些非常相似的事情。这是一种非常简单的方法,我在经历了很多头痛之后想到了这一点。

$friendsArray = array("zac1987", "peter", "micellelimmeizheng1152013142");
$friendsArray2 = implode("','",$friendsArray); 

这会在数组中的每个元素之间添加引号,但不会在开头或结尾添加因此: $ friendsArray2 =“zac1987','peter','micellelimmeizheng1152013142” 所以现在你所缺少的是zac1987中z之前和3142之后最后的单引号 解决这个问题只需将SELECT friendsArray2包装在SELECT语句中的单引号中。

经过尝试,测试和真实。

$query120 = "SELECT picturemedium FROM users WHERE username IN ('$friendsArray2')";
echo $query120;

<强>输出: SELECT picturemedium FROM users WHERE username IN('zac1987','peter','micellelimmeizheng1152013142')