Php 将数组与数据库匹配

Php 将数组与数据库匹配,php,arrays,Php,Arrays,我有一个数组(61),其中包含可能的用户名,我想根据数据库条目验证每个用户名。我正在使用以下代码: foreach(profileName("Dev","Db") as $k => $val){ $db->query("SELECT profile_name FROM eb_user_account WHERE profile_name = '$val'"); if($db->numRows() == 0){ echo $val ." [matc

我有一个数组(61),其中包含可能的用户名,我想根据数据库条目验证每个用户名。我正在使用以下代码:

foreach(profileName("Dev","Db") as $k => $val){
    $db->query("SELECT profile_name FROM eb_user_account WHERE profile_name = '$val'");
    if($db->numRows() == 0){
        echo $val ." [match found at key: {$k}]";
        break;
    }
}
profileName(“Dev”,“Db”)
函数保存数组。这段代码工作得很好,很平滑,在不匹配的地方完全中断。我只是好奇是否有更快更好的方法来完成这项任务。请推荐我


感谢您,您可以使用MySQL的
IN()
子句,例如

从myTable中选择*,其中profile_名称位于('foo','bar'))

您正在寻找mySQL的
IN
操作符和PHP函数的组合:

$query = sprintf(
    'SELECT profile_name FROM eb_user_account WHERE profile_name IN (%s)',
    implode(',', profileName("Dev","Db"))
);
值得注意的是,如果使用参数化查询,则不可能传递任意长度的参数列表。例如:

$stmt = $dbh->prepare('SELECT * FROM table WHERE col IN (?)');
$rs = $stmt->execute(array(implode(',', $myarray)));
将失败。语句中的
参数数量必须与占位符数量匹配。例如:

$stmt = $dbh->prepare('SELECT * FROM table WHERE col IN (?,?,?)');
$rs = $stmt->execute(array(1,2,3));
仔细想想

$myarray = profileName("Dev","Db");
$placeholders = array_fill(0, count($myarray), '?');
$query = sprintf(
    'SELECT profile_name FROM eb_user_account WHERE profile_name IN (%s)',
    implode(',', $placeholders);
);
$stmt = $dbh->prepare($query);
$rs = $stmt->execute($myarray);
应该正确地将所有内容参数化