これは簡単な質問かもしれませんが、それを解決する方法を理解するのに苦労しています。ユーザーが「カスタム」または「すべて」のスタッフを選択してジョブに割り当てることができるフォームがあります。
カスタムが選択されている場合、ユーザーは各チェックボックスをクリックしてスタッフを選択し、それらをジョブテーブルに挿入します。これにより、以下の配列が生成されます(3、1、10はスタッフIDです)
Array
(
[0] => 3
[1] => 1
[2] => 10
)
「すべてのスタッフ」が選択されている場合、最初にselectステートメントを照会してすべてのスタッフIDをスタッフテーブルから取得し、次に上記と同じようにジョブテーブルに挿入します。ただし、これにより配列が生成されます。
Array
(
[0] => Array
(
[staffID] => 1
[0] => 1
)
[1] => Array
(
[staffID] => 23
[0] => 23
)
[2] => Array
(
[staffID] => 26
[0] => 26
)
[3] => Array
(
[staffID] => 29
[0] => 29
)
)
上記の配列を最初の配列に変換するにはどうすればよいですか?
以下のコードを使用してデータベースにクエリを実行し、すべてのスタッフIDを取得してから挿入します。
$select = $db->prepare("SELECT staffID FROM staff");
if($select->execute())
{
$staff = $select->fetchAll();
}
for($i = 0; $i<count($staff); $i++)
{
$staffStmt = $db->prepare("INSERT INTO staffJobs (jobID, userID) VALUES (:jobID, :staffID)");
$staffStmt->bindParam(':jobID', $jobID, PDO::PARAM_INT);
$staffStmt->bindParam(':staffID', $staff[$i], PDO::PARAM_INT);
$staffStmt->execute();
}
最初の配列は正常に挿入されますが、最後の配列はstaffIDにゼロを挿入します。
助言がありますか?
ありがとう=)。
マニュアルの 例2 をご覧ください。最初のクエリでは、次を使用できます。
$staff = $select->fetchAll(PDO::FETCH_COLUMN, 0);
そして、2番目の配列は最初の配列と同じ形式になります。
for
内にprint_r($staff[$i])
があれば、おそらく
_ Array
(
[staffID] => 1
[0] => 1
)
_
つまり、代わりに_$staff[$i]['staffID']
_を使用する必要があります。
現在のコードで動作する他の選択肢は、PDOStatement::fetchColumn()
の代わりに fetchAll()
を使用することです。