web-dev-qa-db-ja.com

データベースに特殊文字を挿入する方法は?

MySQLデータベースに特殊文字を挿入する方法を教えてもらえますか? PHPスクリプトを作成しました。このスクリプトは、データベースにいくつかの単語を挿入するためのものですが、Wordに 'が含まれている場合は挿入されません。

PHPmyAdminを使用すると特殊文字を正常に挿入できますが、PHP経由で挿入すると機能しません。 PHPは特殊文字を別の文字に変更していますか?その場合、適切に挿入する方法はありますか?

16
Joey Morani
$insert_data = mysql_real_escape_string($input_data);

データが$input_dataとして保存されていると仮定します

28
Anthony

逃げていますか? mysql_real_escape_string()関数を試してみると、特殊文字が処理されます。

10
zaf

次のような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() はこれを処理します。

6
Paul Lammertsma

usemysql_real_escape_string

それでは、mysql_real_escape_stringは何をしますか?

このPHPライブラリ関数は、\ n、\ r、\、\ x00、\ x1a、 'および“の文字にバックスラッシュを付加します。重要な部分は、一重引用符と二重引用符がエスケープされることですなぜなら、これらは脆弱性を広げる可能性が最も高いキャラクターだからです。

Sql_injectionについてお知らせください。この link を開始として使用できます

6
Peter Parker

適切に直接クエリに貼り付けています。代わりに、適切な関数を使用してそれらを「エスケープ」する必要があります- mysql_real_escape_stringmysqli_real_escape_string または PDO :: quote .

5

他の人が指摘しているように、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.

3
symcbean

おそらく「mysql_real_escape_string()」はuで動作します

2
OM The Eternity

htmlspecialchars関数は、最高のソリューションフェローです。今日、私は特殊文字を含む文字列を挿入する方法を探していましたが、Googleは非常に多くのStackoverflowリストをスローしましたが、それらのどれも私に解決策を提供しませんでした。 w3schoolsページで見つけました。はい、次のようにこの関数を使用して問題を解決できました。

$abc = $POST['xyz'];

$abc = htmlspecialchars($abc);
0
Solomon Sudhir

例:
$ 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
_
0
Nishanth ॐ

これを使用してください:htmlentities($_POST['field']);

十分だけ。特殊文字の場合:

CI htmlentities($this->input->post('control_name'));に使用

0
Soyab Badi
$var = mysql_real_escape_string("data & the base");
$result = mysql_query('SELECT * FROM php_bugs WHERE php_bugs_category like  "%' .$var.'%"');
0
amarjit singh