2016-12-17 93 views
-2

我不能使用功能real_escape_string我不能使用功能real_escap_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()才躲過了像'"等,可以使用錯誤的\查詢,但它不字符串中刪除字符。

有啥插入到你的數據庫是正確的:)

它是這樣的:

echo "\"this is a double quote"; 

你看,這應該是所有瀏覽器上的錯誤,但由於我們使用\來轉義雙引號將被解釋爲字符串文字。

編輯: 它可以通過使MySQL的保護你的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語句會成爲:

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

,這將在SQL

因此成爲一個語法錯誤如果某人輸入他們的名字如'; drop table tablename;,查詢將變成這樣:

INSERT INTO users (first_name,last_name) VALUES(''; drop table tablename;',''John') 

被執行的查詢後,taadaaa你的表走了

當你輸出回瀏覽器,你需要剝去斜線像下面
+0

這個功能如何保護我? – Ava

+0

這個功能如何保護我? 保護我什麼? 給我例子? – Ava

+0

@Ava我編輯了我的答案來回答你 –