したがって、私が書いているこのプログラムでは、実際にフォームを使用してユーザーからSQLクエリを取得します。次に、データベースでそのクエリを実行します。
ユーザー入力を「信頼」しないことを知っているので、入力をサニタイズしたいと思います。使用しようとしてmysql_real_escape_string
いますが、機能させることができませんでした。
入力を前提として、これが私が試していることです。
select * from Actor;
//"query" is the input string:
$clean_string = mysql_real_escape_string($query, $db_connection);
$rs = mysql_query($clean_string, $db_connection);
if (!$rs)
{
echo "Invalid input!";
}
これは常に私に与えています
"無効入力!"
エラー。
clean_string
パーツを取り出してmysql_query
クエリを実行すると、
"無効入力"
メッセージは出力されません。むしろ、私がこれを行うとき:
$rs = mysql_query($query, $db_connection);
if (!$rs)
{
echo "Invalid input!";
}
出力されません
"無効入力"。
ただし、このmysql_real_escape_string
関数を使用する必要があります。私は何が間違っているのですか?
アップデート:
入力として与えられ
select * from Actor;
て、私は以下を見つけました。
echoステートメントを使用すると、サニタイズする前に、文字列が値を保持していることがわかりました
select * from Actor;
。これは正しいです。ただし、サニタイズした後は、の値が正しくないselect *\r\nfrom Actor;
ため、エラーメッセージが表示されます。なぜ
mysql_real_escape_string
これをしているのですか?