选择排除数组值的值

时间:2018-03-10 14:54:10

标签: php mysql mysqli

我找不到这种问题的解决方案。我需要$ sql变量显示除指定值以外的所有值作为username!= $ var2数组值。

    $user_data = user_data($session_user_id, 'user_id', 'username', 'blocked_emails');

    $var = $user_data['blocked_emails'];
    $var2 = explode(',', $var);

    $sql = mysqli_query($con1, "SELECT * FROM `test` WHERE `username` != '$var2' ORDER BY user_id");

while ($row2 = mysqli_fetch_array($sql)) {

    $uid = $row2['user_id'];
    $username = $row2['username'];
    }

2 个答案:

答案 0 :(得分:2)

核心问题似乎是SELECT语句应该如何:

SELECT * FROM `test`
  WHERE `username` NOT IN ('abc@mailinator.com', 'webmaster@test.test', …)
  ORDER BY `user_id`

如何在PHP中生成此语句留给读者练习。 Lajos Arpad的答案提供了一个良好的开端,但使用预准备语句($con1->prepare(…))更安全,因此您不必担心值,SQL注入等中的撇号。

答案 1 :(得分:0)

正如雷纳多建议的那样,你不需要像这样:

StudentControllerIT

但是在这个解决方案中,我们假设 $user_data = user_data($session_user_id, 'user_id', 'username', 'blocked_emails'); $var = $user_data['blocked_emails']; $var2 = explode(',', $var); for ($index = 0; $index < count($var2); $index++) $var2 = "'".$var2[$index]."'"; $sql = mysqli_query($con1, "SELECT * FROM `test` WHERE `username` not in (".implode(",", $var2).") ORDER BY user_id"); while ($row2 = mysqli_fetch_array($sql)) { $uid = $row2['user_id']; $username = $row2['username']; } 中没有一个值包含撇号。您需要采取进一步措施来清理查询,以确保它能够很好地处理任何可能的输入并同时防止SQL注入。