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 数组字符串/用户名的主要内容,如果未能解决你的问题,请参考以下文章