2016-12-17 10 views
-2

をreal_escap_string機能を使用するカント:私は</p> <p>私のコードreal_escape_string機能を使用するカント

<?php include('includes/db.inc.php'); ?> 
<?php 

$fn = " 'Jim "; 
$ln = " 'John "; 

$first_name = $conn->real_escape_string($fn); 
$last_name = $conn->real_escape_string($ln); 

$conn->query("INSERT INTO users (first_name,last_name) 
VALUES('{$first_name}','{$last_name}') "); 


echo $first_name.' '.$last_name; 

?> 

出力:私のブラウザで :私のデータベース内

\'Jim \'John 

id first_name last_name created 
1 'Jim  'John  2016-12-17 14:51:23 

enter image description here

+0

「使用できません」という意味をご記入ください。何が効いていないのですか? – CGritton

+0

結果に何が問題なのですか?変数は意図したとおりにデータベースに入れられました。 'real_escape_string'を使用しなかった場合は、構文エラーが発生していましたが、エスケープするとそれができませんでした。 – Barmar

答えて

-1

私はreal_escape_string()が唯一のバグクエリが\を使用することができます'"などのような文字をエスケープしますが、それは文字列でそれを削除するdoesntの、あなたは間違ってそれを理解すると思います。

ので、どのようなデータベースに挿入されたのは、

が、このように正しい:)です:あなたが見るように

echo "\"this is a double quote"; 

、これはすべてのブラウザでエラーにする必要がありますが、我々は\を使用しているため二重引用符をエスケープすると、文字列リテラルとして解釈されます。

編集: それは、MySQLを作ることによって、SQLインジェクションであなたを保護することができます文字列リテラルとして'を解釈します。

INSERT INTO users (first_name,last_name) VALUES(''Jim',''John') 

をし、それはとても

SQL

で構文エラーになります:あなたは、クエリが実行された後 real_escape_string();

$fn = " 'Jim "; 
$ln = " 'John "; 

$first_name = $fn; 
$last_name = $ln; 

$conn->query("INSERT INTO users (first_name,last_name) 
VALUES('{$first_name}','{$last_name}') "); 

を使用していけない場合何が起こるか 、SQLステートメントはなります誰かが自分の名前を'; drop table tablename;と入力すると、クエリは次のようになります。

INSERT INTO users (first_name,last_name) VALUES(''; drop table tablename;',''John') 
あなたが戻ってブラウザへの出力は、あなたが以下のようにスラッシュを除去する必要がある場合

そのクエリが実行された後、あなたのテーブルをtaadaaaが

+0

この機能によって私を保護する方法は? – Ava

+0

この機能によって私を保護する方法は? 何を保護しますか? 私に例を挙げましたか? – Ava

+0

@Ava私はあなたに答えるために私の答えを編集しました –

関連する問題