4
$user='root';

try{
$pdo=new PDO('mysql:host=localhost;dbname=test',$user);
$pdo->exec('set character set utf8');
}
catch(PDOException $e){
echo 'Error: '.$e->getMessage();
}

//using bound variables?
$stmt=$pdo->prepare('insert into test(name) value(:name)');
$stmt->bindParam(':name',$_POST['name']);
$stmt->execute();

//using named parameters
$stmt=$pdo->prepare('insert into test(name) value(:name)');
$stmt->execute(array(':name'=>$_POST['name']));

//using placeholders
$stmt=$pdo->prepare('insert into test(name) value(?)');
$stmt->execute(array($_POST['name']));

//using bound parameters w/ placeholders
$stmt=$pdo->prepare('insert into test(name) value(?)');
$stmt->bindParam($_POST['name']);
$stmt->execute();

PHPスターターとして自分に最適なものを知りたいだけです。何を使用すればよいか混乱していて、何が最適で一般的に使用されているかを知りたいです。

4

3 に答える 3

5

2番目の方法が最適だと思います:

//using named parameters
$stmt=$pdo->prepare('insert into test(name) value(:name)');
$stmt->execute(array(':name'=>$_POST['name']));

params という名前を付けたので、配列に何が入っているかがわかります。?コード内の 5 つ以上を調べて、順序が正しいかどうかを調べようとするのは嫌いです。また、配列をスローして実行するのに必要なコード行数が少なくて済みます。多くの->bindParam()行を通過するよりも、すべて同時に。

ただし、このオプションが検討されていない場合は、他のオプションよりも多くの行を検討->bindParam()します。

この質問は、個人の好みに帰着します。自分に最適なもの、読みやすく理解しやすいもの (特に、数週間または数か月後に戻ってきた場合)、およびコードをデバッグするために選択する必要がある他の人にとって読みやすいものを選択してください。

編集: それほど高速に動作するものはありません。クエリをまとめると、どちらかというと数ミリ秒長くかかる場合がありますが、データベースでクエリを実行するには同じ時間がかかります。速いということは、ここで注目すべきことではありません。

于 2012-08-27T14:21:33.777 に答える
2

答えは、個人的な好みの 1 つに帰着します。それらはすべて意図したとおりに機能し、同様に同じ結果をもたらしますが、「どのように書くか」は完全にあなたがより快適なものに依存します。

私自身の個人的な意見ですが、設定している値が非常に明確になるため、名前付きパラメーターが最適だと思います。クエリにパラメータが 1 つしかない場合は無意味かもしれませんが、10 以上ある場合は便利です。

于 2012-08-27T14:22:10.907 に答える
1

個人的には、4つのうち最初のほうが好きです。何をしているのかが明確なので、コードの保守が容易になります。配列の使用は、配列が既に存在し、すべての値がクエリで使用される場合に便利です。それでも、コードを書いていると、バグに直面します?また、プレースホルダーを使用するクエリのデバッグは面倒です。

パフォーマンスに関しては、4 つのアプローチのいずれにも大きな違いはありませんが、いくつかの違いがあります。

4 つの例のうち 2 つで、配列を作成しています。配列の作成は安価ですが、無料ではありません。
を使用bindParamすると、データ型を簡単に指定できます (PDO の定義済み定数をブラウズするだけです)。ほとんどの場合、これはそれほど大きな違いにはなりませんが、完全なテーブル スキャンが実行されている場合は、通常、MySQL に型変換を行わせない方がよいでしょう。

したがって、パフォーマンスに関しては、必要がない場合は新しい配列を作成しないでください。可能な場合は、正しいデータ型を設定してください。

コードの品質について: 通常、名前付きパラメーターを使用すると作業が楽になるため、できる限り使用することをお勧めします。

于 2012-08-27T14:36:14.407 に答える