私はバインドパラメータ場合mysql_real_escape_stringのを使用する必要がありますか?

StackOverflow https://stackoverflow.com/questions/2284317

質問

私は、次のコードを持っています:

function dbPublish($status)
{
 global $dbcon, $dbtable;

 if(isset($_GET['itemId']))
 {
  $sqlQuery = 'UPDATE ' . $dbtable . ' SET active = ? WHERE id = ?';
  $stmt = $dbcon->prepare($sqlQuery);
  $stmt->bind_param('ii', $status, $_GET['itemId']);
  $stmt->execute();
  $stmt->close();
 }
}
この場合にはmysql_real_escape_stringのに

ドゥIの必要性や、私は大丈夫だ?

役に立ちましたか?

解決

DBエンジン自体ことを行います。<:

いいえ、あなたはプリペアドステートメントを使用しているとき、は(なしあなたがコールmysqli_real_escape_stringする必要はありませんつまり)は、値を自分でエスケープする必要はありません。 / P>

(あなたはmysql_real_escape_stringを呼び出し、バインドされたパラメータを使用していた場合は、実際に、あなたの文字列が二回エスケープになるだろう - 素晴らしいことではないと思われる:あなたはどこにでも文字をエスケープで終わるだろう...)


追記として:あなたの値は、の('ii'によって示されるように)の整数として渡され、あなたはプリペアドステートメントを使用していなかった場合でも、mysql_real_escape_stringを呼び出す必要がないように:その名が示すように、これを関数が脱出する...文字列を使用されます。

整数の場合、私は一般的にちょうど私が私のSQLクエリに注入してくださいデータ本当に整数であるを作るために intval の使用しますます。

(しかし、あなたが準備したクエリを使用しているとして、もう一度、あなた自身を脱出のようなものを行う必要はありません)

他のヒント

いいえ、あなたはしてはなりません。 2を組み合わせることでしまいます 目に見えるエスケープ文字で自分のデータに現れてます。

function dbPublish($status)    
{    
 global $dbcon, $dbtable;    

 if(isset($_GET['itemId']))    
 {    
  $sqlQuery = 'UPDATE ' . $dbtable . ' SET active = ? WHERE id = ?';    
  $stmt = $dbcon->prepare($sqlQuery);    
  $stmt->bind_param('ii', $status, $_GET['itemId']);    
  $stmt->execute();    
  $stmt->close();    
 }    
}   
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top