私はバインドパラメータ場合mysql_real_escape_stringのを使用する必要がありますか?
-
21-09-2019 - |
質問
私は、次のコードを持っています:
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();
}
}
所属していません StackOverflow