2016-08-27 14 views
-2

私はMysqliとPHPを初めて使い、手続き型ではなくオブジェクト指向のコードを使いたいと思っています。私はmysqli_real_escape_stringをオブジェクト指向の方法に変換するのには苦労しています。以下のコードでは、オブジェクト指向の使い方がわからず、Googleの検索では私が探している回答を提供していないので、手順コードを使用しました。mysqliオブジェクト指向の実エスケープ文字列

$sql = "SELECT email FROM `users` WHERE email = '".mysqli_real_escape_string($link, $_POST['email'])."'LIMIT 1"; 

     $result = $link->query($sql); 

    if($result->num_rows > 0) { 

     echo "The email " .$_POST['email']. " is already taken"; 

    } else { 

     echo $_POST['email']; 
    } 


} 

は、現実の世界では、私は、入力フィールドの検証のいくつかの並べ替えを持っているだろうが、自分のために目的を学ぶために、私は何の検証を持っていません。つまり、誰かが登録ページに行くなら、SQLインジェクションを使うことができます。私は電子メールアドレスが存在するかどうかをチェックするコード内でそれを防止しようとしています。私が読んだところでは、mysqli_real_escape_stringはSQLインジェクションを防ぐために使われ、htmlspecialcharsのようなものを使うとXSSを防ぐことができます。私はこの特定の例でSQLインジェクションを防止しようとしています。

+0

'string mysqli :: escape_string(string $ escapestr)' http://php.net/manual/en/mysqli.real-escape-stringに変換されます。php 'string mysqli :: real_escape_string(string $ escapestr)'^RTM。 –

+0

あなたは、スペースもすべきで、このうち '$ _POST [「メール」])。"それは構文エラーを引き起こし、ひいては、'[email protected] 1 'として読むことを意味してますので、 '$ _POST [' LIMIT'データを選択して[メール]])。「」LIMIT 1 ' –

+0

より良い方法は、私はW3学校からレコードを挿入するために準備されたステートメントを使用する方法のコードを持って準備された文 – tkausl

答えて

0

OOの場合は$link->real_escape_string($_POST['email'])を使用してください。あなたの例では、mysqli_reql_escape_string手順の方法を使用します。

私は、次を参照してください。

<script>alert("Here is an alert");</script>

の代わりに、私はこれを正しく行っていた場合、私が見てする必要があるすべての堰& ALTのもの。第二部のために

、私はあなたがreal_escape_stringhtml_special_charsを取り違えていと思います。
mysqli_real_escape_stringエンティティを変換しない、opositeをhtml_special_charsに変換します。

SQLではエンティティに特殊文字を変換する必要はありません。 mysqli_real_escape_stringにエンコードされたエンティティを返すようにすることはできません。

短いと、には、mysqlクエリ用にエンコードされたエンティティが必要ありません。クエリを「害する」可能性のあるmysql特殊文字のみ

+0

一切の差は行われていない、私は実際に私がreal_escape_string使用する必要はなく、むしろはhtmlspecialcharsないデータを挿入しておりませんので、あなたが言っていますか? – Jonathan

+0

それは彼が言っていることではないことを願っています。私は正直なところ、html_special_charsとhtmlentitiesについて人々が回答を投稿している理由を知らない。 @ジョナサンあなたはこのコメントを投稿しました。*「ユーザーが入力した電子メールアドレスがデータベース内の何かに一致するかどうかを確認しようとしています。あなたがちょうどそれをやろうとしているなら、あなたの質問はこの時点では不明で、あなたがそこに残したコメントにも返答していません。もう一度。この問題を解決したい場合は、私にpingしてください。あなたのコードに構文エラーがあり、それがあなたの本当のコードでなければならないと言いました。 –

+0

私が言っていることではありません。あなたはそれをOOのやり方でしたいと言っています。質問の最初の部分。 質問の2番目の部分は、real_escape_stringが&alt;(エンティティ)を返すと予想していることを示唆しています。私はreal_escape_stringがそれをしないと言っています。 MySQLはそれを必要としません。 – Grzegorz

0

mysqli_real_escape_stringは、データベースクエリでユーザースペースから安全に文字列を使用することのみを目的としたものです(SQLインジェクション攻撃と呼ばれます)。あなたのケースでは、電子メール(そのjsコード)がDBに正しく挿入されます。

しかし、HTMLサイト上のユーザー空間のデータを表示することができます。これは、クロスサイトスクリプティングを防ぐために別の修正が必要です。 https://secure.php.net/manual/de/function.htmlentities.php

TL; DR:

mysqli_real_escape_string(またはそのOOPに相当)が\'

になってきて'ようなデータベースクエリで問題を起こす文字をエスケープは対応するhtmlエンティティに文字を変更します。 <&lt;

+0

私の元の質問を編集しました); 'であり、ANYクエリのユーザー空間の変数を使用する場合は常にreal_escape_stringを使用する必要があります。 – Jonathan

+0

には何も一致するかどうかを確認しようとしていますが、あなたが本当に '電子メール=

  • 11. 文字列のエスケープ文字をエスケープできません
  • 12. Mavenマップのエスケープ文字列
  • 13. MySQLのエスケープ文字列。
  • 14. エスケープ文字列内のRegExp.lastMatch($&)
  • 15. CodeIgniterのエスケープ文字列
  • 16. Tclの文字列エスケープ
  • 17. Pythonの文字列エスケープ
  • 18. オブジェクト指向パスカルでのインラインVS線形文字列処理パフォーマンス - Delphi
  • 19. ユニコードのエスケープ文字を含む文字列を通常の文字列に変換する(エスケープ文字なし)
  • 20. オブジェクト指向の実装方​​針
  • 21. SBJsonとエスケープ文字列。
  • 22. Ormliteエスケープ文字列メソッド?
  • 23. 文字列エスケープ変換vb.net
  • 24. エスケープSQL文字列Javaで
  • 25. URLエスケープMFC文字列
  • 26. AndroidエスケープJavaScript文字列
  • 27. SQL文字列エスケープ質問
  • 28. SQL Serverエスケープ文字列
  • 29. Django REST文字列エスケープ
  • 30. エスケープ文字列のMySQL構文エラー