ホームページ > バックエンド開発 > PHPチュートリアル > php、mysqlの文字エスケープに関連する問題

php、mysqlの文字エスケープに関連する問題

WBOY
リリース: 2016-06-13 13:28:27
オリジナル
1085 人が閲覧しました

php mysql 文字エスケープの問題

バックグラウンド処理
$name=addslashes($_POST['name']);//転送時一重引用符

を挿入すると、エスケープ記号とともにデータベースに保存されますか?それともエスケープ記号を削除して保存する必要がありますか?

エスケープ記号を使用してデータベースに保存されている場合は、小さな問題が発生します

名前が繰り返されているかどうかを確認したい場合は、$name を比較する必要があります

まだエスケープ $name=addslashes($_POST['name']);

SELECT count(*) AS num FROM talbe WHERE name = $name

num 表示は 0、つまりつまり、同じものは見つかりません。

print SQL ステートメントは SELECT count(*) AS num FROM talbe WHERE name = 'this/'s a apple'

num 値データベースを開いたところ、name フィールドの値が this/'s a apple であることがわかりました。

$name を再度エスケープすると、値が見つかります。 $name は this/. // レコードを見つけるためのリンゴです

つまり、addslashes 関数を 2 回使用します

この問題にどう対処しますか?二度使うのは面倒ではないでしょうか?


-----解決策---------
さらに、Php.ini で magic_quotes_gpc が有効になっている場合、cookie、post、get はデフォルトでラッシュを追加します。たとえば、ユーザーが li'lei をアップロードすると、$_POST['name'] で取得されるのは li'lei になります。次のように SQL に直接接続するだけです:

select * from table where name='li'lei'、ラッシュは必要ありません。
addslashes を指定すると、異常になります。mysql 解析コマンドにも影響するため、addslashes も転送し、結果は本当に異常になります:

addslashes("li' lei" ); li\'lei を生成し、それを SQL に入力します:

select * from table where name='li\'lei'。データベースに入ると、実際には li'lei がもう 1 つ追加されます。


さらに、実際にユーザーによって送信された値を使用したい場合、通常、デフォルトで有効になっているのは php.ini のみの magic_quotes_gpc (get、post、cookie) であるため、ストリップスラッシュはほとんど使用されません。 li'lei などの場合は、stripslashes($_POST['name']); を実行する必要があります。ここでの名前は自動的に追加された li'lei で、削除後は li'lei になります。
strip が使用されていない場合、ページに出力すると、ユーザーには li'lei が表示されます。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート