MySQLデータベースに特殊文字を挿入する方法を教えてもらえますか? PHPスクリプトを作成しました。このスクリプトは、データベースにいくつかの単語を挿入するためのものですが、Wordに 'が含まれている場合は挿入されません。
PHPmyAdminを使用すると特殊文字を正常に挿入できますが、PHP経由で挿入すると機能しません。 PHPは特殊文字を別の文字に変更していますか?その場合、適切に挿入する方法はありますか?
$insert_data = mysql_real_escape_string($input_data);
データが$input_data
として保存されていると仮定します
逃げていますか? mysql_real_escape_string()関数を試してみると、特殊文字が処理されます。
次のようなSQL文字列をエスケープしている可能性があります。
_SELECT * FROM `table` WHERE `column` = 'Here's a syntax error!'
_
次のように引用符をエスケープする必要があります。
_SELECT * FROM `table` WHERE `column` = 'Here\'s a syntax error!'
_
mysql_real_escape_string()
はこれを処理します。
usemysql_real_escape_string
それでは、mysql_real_escape_stringは何をしますか?
このPHPライブラリ関数は、\ n、\ r、\、\ x00、\ x1a、 'および“の文字にバックスラッシュを付加します。重要な部分は、一重引用符と二重引用符がエスケープされることですなぜなら、これらは脆弱性を広げる可能性が最も高いキャラクターだからです。
Sql_injectionについてお知らせください。この link を開始として使用できます
適切に直接クエリに貼り付けています。代わりに、適切な関数を使用してそれらを「エスケープ」する必要があります- mysql_real_escape_string 、 mysqli_real_escape_string または PDO :: quote .
他の人が指摘しているように、mysql_real_escape_string()が問題を解決します(スラッシュを追加します)が、セキュリティ上の理由で常にmysql_real_escape_string()を使用する必要があることに注意してください-
SELECT * FROM valid_users WHERE username='$user' AND password='$password'
ブラウザが送信した場合
user="admin' OR (user=''"
password="') AND ''='"
クエリは次のようになります。
SELECT * FROM valid_users
WHERE username='admin' OR (user='' AND password='') AND ''=''
つまり、セキュリティチェックは完全にバイパスされます。
C.
おそらく「mysql_real_escape_string()
」はuで動作します
htmlspecialchars関数は、最高のソリューションフェローです。今日、私は特殊文字を含む文字列を挿入する方法を探していましたが、Googleは非常に多くのStackoverflowリストをスローしましたが、それらのどれも私に解決策を提供しませんでした。 w3schoolsページで見つけました。はい、次のようにこの関数を使用して問題を解決できました。
$abc = $POST['xyz'];
$abc = htmlspecialchars($abc);
例:
$ parent_category_name =紳士服
ここでSQLクエリを検討してください
_$sql_category_name = "SELECT c.*, cd.name, cd.category_id as iid FROM ". DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.category_id = cd.category_id) WHERE cd.name = '" . $this->db->escape($parent_category_name) . "' AND c.parent_id =0 ";
_
エラー:
_Static analysis:
1 errors were found during analysis.
Ending quote ' was expected. (near "" at position 198)
SQL query: Documentation
SELECT c.*, cd.name, cd.category_id as iid FROM oc_category c LEFT JOIN oc_category_description cd ON (c.category_id = cd.category_id) WHERE cd.name = 'Men's Clothing' AND c.parent_id =0 LIMIT 0, 25
MySQL said: Documentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's Clothing' AND c.parent_id =0 LIMIT 0, 25' at line 1
_
実装してみてください:
_$this->db->escape($parent_category_name)
_
上記の方法はOpenCartフレームワークで機能します。フレームワークを見つけて、OR mysql_real_escape_string()
_をコアPHPに実装します
これは、紳士服になります。つまり、私の場合
_$sql_category_name = "SELECT c.*, cd.name, cd.category_id as iid FROM ". DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.category_id = cd.category_id) WHERE cd.name = '" . $this->db->escape($parent_category_name) . "' AND c.parent_id =0 ";
_
したがって、escape()を次のように実装することにより、クエリの明確な画像を取得できます。
_SELECT c.*, cd.name, cd.category_id as iid FROM oc_category c LEFT JOIN oc_category_description cd ON (c.category_id = cd.category_id) WHERE cd.name = 'Men\'s Clothing' AND c.parent_id =0
_
これを使用してください:htmlentities($_POST['field']);
十分だけ。特殊文字の場合:
CI htmlentities($this->input->post('control_name'));
に使用
$var = mysql_real_escape_string("data & the base");
$result = mysql_query('SELECT * FROM php_bugs WHERE php_bugs_category like "%' .$var.'%"');