1

既存のデータ ストレージ php コードをmysql_*関数から PDO に変更し、手続き型から OOB プログラミングに変更しています。何かに気づいたとき、私は SQL ステートメントを更新していました。

INSERT複数のテーブルとクエリ用に配列を設定しています。バインド値として機能するように配列を定義していたため、バインドされた値が呼び出される順序が と で異なることにUPDATE気付きました。簡単な例を次に示します。UPDATEINSERT

$bound_values = array(
    ':column_aa' => 'aa',
    ':column_ab' => 'ab',
    ':column_ac' => 'ac'
    )
);

の SQL の例INSERT:

INSERT INTO `table_a` 
    (`id`, `column_aa`, `column_ab`, `column_ac`) 
VALUES 
    ('', :column_aa, :column_ab, :column_ac);

そしてUPDATE

UPDATE `table_a` SET 
    `column_ab` = :column_ab, `column_ac` = :column_ac, `column_aa` = :column_aa;

PHP PDO の例:

$pdo = new PDO('mysql:host=localhost;dbname=example', 'root', '');
// The second parameter of the PDO cursor is what I saw that raised the flag
$sth = $pdo->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->execute($boud_values);

だから私の質問は、SQL ステートメントが$bound_values配列に対してどのような順序であるかについて問題なくこの方法を使用し続けることができるか、それとも懸念して変更を加える必要があるかということです。

私が作業している既存のコードは、上に示した SQL ステートメントほど単純ではないことに注意してください。

4

2 に答える 2

4

名前付きプレースホルダー (:col_name) を使用すると、好きな順序で配置できます。ただし、位置プレースホルダー (?) を使用すると、順番に配置する必要があります。

于 2013-05-31T20:22:23.363 に答える