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

Posted

技术标签:

【中文标题】mysql WHERE IN 数组字符串/用户名【英文标题】:mysql WHERE IN array string / username 【发布时间】:2011-09-30 20:24:30 【问题描述】:

代码:

$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”、“mice...”。每个用户名如何用单引号括起来?

【问题讨论】:

考虑在此问题中添加 Perl 或 php 标记以覆盖更多受众。 【参考方案1】:

让我们一个接一个地遍历每个名​​称,然后逐个转义。

我将建议您使用实际的 mysql 转义函数而不是仅仅用引号括起来,以确保数据实际上正确地进入查询。 (否则,如果我输入像It's me! 这样的名称,单引号会弄乱查询。)我将假设您使用的是PDO(您应该这样做!),但是,如果不是,用mysql_real_escape_string 替换对PDO::quote 的引用。

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


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

【讨论】:

我测试了mysql_real_escape_string,输出还是和'zac1987,peter,micellelimmeizheng1152013142'一样 是的,这里应该是这样。你需要的是$friendsArray[$key] = "'".mysql_real_escape_string($friend)."'"; @Michael:笨蛋。自从我使用标准 MySQL 函数以来已经有一段时间了 xD 感谢您的关注:)【参考方案2】:

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

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

【讨论】:

它也有上面提到的同样的问题。检查 Matchu 的答案以获得真正的解决方案。 这个好像中间有个不加单引号。我相信杰里米的意思是: $friendsArray2 = "'" 。加入("', '",$friendsArray) 。 "'"; 中间单引号缺失(如果是数字),应该是$friendsArray2 = "'" . join("', '",$friendsArray) . "'"; 【参考方案3】:

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

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

【讨论】:

【参考方案4】:

只需要做一些非常相似的事情。这是一种非常简单的方法,我在头疼之后才发现。

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

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

它已经过尝试、测试并且是真实的。

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

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

【讨论】:

【参考方案5】:

如果您不想使用 PDO 或其他复杂的解决方案,请使用 implode 函数,一切就绪。

$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')

【讨论】:

非常简单的解决方案,对我来说非常及时,谢谢

以上是关于mysql WHERE IN 数组字符串/用户名的主要内容,如果未能解决你的问题,请参考以下文章

mysql where in 数组解决小tips

mysql中 where in 用法详解

mysqlwhere条件判断字符位数

MySQL where NOT IN 名称数组?

mysql的关键字

在 mysql where in 子句中对数组使用 implode