2011-01-15 11 views
0

はい。だから私は(MySQLの)私は例更新するどのようなときPHP PDO:準備文質問

はだから今、それはこのようになります接続し、データベースと通信するためのPDOのlibを使用しています「BLA」欄:あなたは私を見ることができれば今

$sql = $connect->prepaer("UPDATE users SET bla='bla' WHERE id = $USER AND age =:age"); 
$sql->bindValue(":age", $age); 
$sql->execute(); 

年齢のみで、$ USERではなく値をバインドしました。

他のすべてのクエリでも、$ USER以外のすべての他の値をバインドしました。

$ USERは、あなたがログインしたユーザーIDです。

mysql_ *(mysql_real_escape_string)でできるようなエスケープ文字列があれば$ USER変数を保護できるのだろうか?エルス

私はすべての私のクエリを編集する必要があり、かつbindValueを追加します(:ユーザーは、$ USER)...

答えて

2

さて、あなたはおそらく可能なエスケープ関数やメソッドのいずれかを使用することができますが、質問です: なぜ?確かに、すべてのクエリを見つけるのは面倒かもしれませんが、クエリの半分をパラメータ化するのは本当に奇妙なことです。つまり、バインドを追加してください;)

しかし、mysql_real_escape_string()の問題点は何ですか?クイックハックのために本当に行っているのであれば、それをあなたの文字列ビルに追加すれば、あなたは遊ぶことができます:)。

しかし、もう一度、バインドを追加するだけです。お願いします?将来はあなたに感謝します。

+1

@ Karem Nanne氏によると、 '$ USER'もバインドすることを検討します。 –

+1

mysql_real_escape_stringは、使用中の文字セットをチェックするためにmysql接続が必要です。また、エラーレベルによっては、false === mysql_real_escape_string( "Hello world!")。 – David

1

これは、一貫性を持たせるためにユーザーを変更することになります。それは余分な仕事かもしれませんが、長期的にはそれは価値があります。

また、あなたは分かりません。あなたは、bindValue()を使うのではなく、Execute関数にパラメータの配列を渡すことができます。私は個人的にラッパーデータベースクラスを持っていますので、私の更新呼び出しは次のようになります:

$ db->更新( "UPDATEユーザーSET bla =?WHERE id =?AND age =?"、array( 'bla'、$ USER、年齢));

非常に綺麗に見えるIMO。

私のクラスでは、SQLでprepareを呼び出し、配列パラメータでExecuteを呼び出すだけです。

1

PDO:quote()でも可能ですが、この値をバインドすることもできます。