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

zac*_*987 11 php mysql arrays

码:

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

这是输出:

SELECT picturemedium FROM users WHERE username IN ('zac1987, peter, micellelimmeizheng1152013142')
Run Code Online (Sandbox Code Playgroud)

它失败了,因为用户名没有被"zac1987","peter","mice ......"等单引号包裹.如何用单引号包装每个用户名?

Mat*_*chu 12

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

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

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

$friendsArray2 = join(', ', $friendsArray);
Run Code Online (Sandbox Code Playgroud)


小智 9

如果您不想使用PDO或其他复杂的解决方案,请使用implode功能,您就完成了所有设置.

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

解决方案:我只是崩盘您$friendArray 通过 ','就是这样.干净利落!它正在发挥作用.

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


tra*_*nte 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;
Run Code Online (Sandbox Code Playgroud)


Jer*_*y D 6

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

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

  • 这似乎没有添加中间单引号.我相信杰里米的意思是:$ friendsArray2 ="'".加入("','",$ friendsArray)."'"; (2认同)