Php 将数组与数据库匹配
我有一个数组(61),其中包含可能的用户名,我想根据数据库条目验证每个用户名。我正在使用以下代码: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
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);
应该正确地将所有内容参数化