質問:
複数の挿入用に設計された PDO クラスでは、パラメータ化されたクエリを作成したにもかかわらず、クエリの実行時に「配列から文字列への変換」エラーが発生します。このエラーはどのように解決できますか?
回答:
このエラーを解決するには、1 つの方法は、データ配列を反復処理し、bindValue を使用します。これにより、各値が特定のパラメーターに適切にバインドされることが保証されます。
このアプローチの実装例は次のとおりです:$query = "INSERT INTO $table (key1, key2, key3) VALUES "; $qPart = array_fill(0, count($data), "(?, ?, ?)"); $query .= implode(",", $qPart); $stmt = $this->start->prepare($query); $i = 1; foreach ($data as $item) { $stmt->bindValue($i++, $item['key1']); $stmt->bindValue($i++, $item['key2']); $stmt->bindValue($i++, $item['key3']); } $stmt->execute();代わりに、
foreach ループを使用することもできます。 prepare ステートメント内で各行の値をバインドします:
$stmt = $pdo->prepare("INSERT INTO foo VALUES (1, 2, 3)"); foreach($data as $item) { $stmt->execute($item); }この方法では、クエリが行ごとに 1 回ずつ複数回実行されます。ただし、前のアプローチよりも実装が簡単です。
以上がPDO MySQL: 「配列から文字列への変換」エラーを発生させずに 1 つのクエリに複数の行を挿入する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。