【问题标题】:Mysql SELECT statement with php array [duplicate]带有php数组的Mysql SELECT语句[重复]
【发布时间】:2011-11-24 05:35:36
【问题描述】:

我在 php 中创建了一个包含几个 USER_ID 的数组。我正在使用具有名为 USERS 的表的 mysql 数据库。 现在我只想从 USERS 中选择那些 user_id 与数组中的 USER_ID 匹配的行。

提前致谢

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    【讨论】:

    • 对于所有其他@users,请不要提供重复的答案。
    • +1,重点回答。
    【解决方案2】:

    implode() 将数组放入 SQL 中的 IN 子句中:

    $sql = "SELECT * FROM tbl WHERE USER_ID IN (" . implode(",", $user_ids) . ");";
    

    这假定您的用户 ID 是整数,而不是必须被引用和转义的字符串。在这种情况下,

    $sqlids = array();
    foreach ($user_ids as $id) {
      // Escape and quote each id
      $sqlids[] = "'" . mysql_real_escape_string($id) . "'";
    }
    $sql = "SELECT * FROM tbl WHERE USER_ID IN (" . implode(",", $sqlids) . ");";
    

    【讨论】:

    • 也许有人认为他们需要对自己喜欢的答案投赞成票而对其他答案投反对票(我的也是)?
    • 可惜,我们看不到谁投了反对票……
    【解决方案3】:

    上面的IN 示例可能更简洁,但这是另一种方法。我已经为人类可读性设置了格式。请注意,如果用户名是用户提交的或可能不安全,请务必在构建 $users 数组时使用 mysql_real_escape_string()

    <?php
    
    $users = array('jim','mary','bob');
    
    $userids = "USER_ID = '".implode("' \n   OR USER_ID = '",$users)."'";
    
    echo "
    SELECT *
    FROM USERS
    WHERE $userids
    ";
    
    ?>
    

    输出

    SELECT *
    FROM USERS
    WHERE USER_ID = 'jim' 
       OR USER_ID = 'mary' 
       OR USER_ID = 'bob'
    

    http://codepad.org/YfkPBEaJ

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多