クライアントから送信された配列に基づいてデータベースをクエリするために、phpに次のコードがあります。
$limit = $_POST['limit'];
$userArray = json_decode($_POST['arr'], true);
$queryPlaceholders= implode(',', array_fill(0,count($userArray), '?'));
$stmt = $db->prepare("SELECT * FROM tableA
WHERE tableA.id IN (".$queryPlaceholders.")
LIMIT ?");
foreach($userArray as $k => $val){
$stmt->bindParam(($k+1), $val);
}
$stmt->bindValue(count($userArray) + 1, (int)trim($limit), PDO::PARAM_INT);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo $result;
このコードにはエラーがあるようです。値11と17を含む配列を送信すると、クエリは値17でのみ実行され、11と17の両方では実行されないように見えます。
私print_r($userArray)
が得たらArray
(
[0] => 11
[1] => 17
)
だから私はphpが正しい配列を持っていることを知っています。ただし、上記のコードを使用してこのクエリを実行し、以下のクエリを実行すると、異なる回答が得られます。
SELECT * FROM tableA
WHERE tableA.id IN (11,17)
LIMIT 10
上記のコードを実行すると、実際にこのクエリを実行しているように見えますか?
SELECT * FROM tableA
WHERE tableA.id IN (17)
LIMIT 10
foreach
また、配列の両方の要素(11と17)が$stmtにバインドされていることを通知するステートメントをループに配置しました