代码:
$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','鼠标......'。如何用单引号包装每个用户名?
答案 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')