0

可能なユーザー名を含む配列(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")関数は配列を保持します。このコードはうまく機能し、一致が発生しない場所で正確に機能します。このタスクを実行するためのより速くてより良い方法があるかどうか私はただ興味があります。私に提案してください。

感謝を込めて

4

2 に答える 2

2

MySQLのIN()句を使用できます。

SELECT * FROM myTable WHERE profile_name IN ('foo', 'bar')
于 2013-02-21T18:39:09.563 に答える
0

INmySQLの演算子とPHPimplode()関数の組み合わせを探しています。

$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)));

失敗します。INステートメント内のパラメーターの数は、プレースホルダーの数と一致する必要があります。例えば:

$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);

すべてが正しくパラメータ化されている必要があります。

于 2013-02-21T18:44:51.757 に答える