2012-02-06 24 views
0
<?php 
$link = mysql_connect('localhost', 'root', 'root') 
    OR die(mysql_error()); 
mysql_select_db('autos') or die('no db'); 
$bookName = "O'relly"; 
$user = addslashes($bookName); 

$query = "INSERT INTO makes VALUES(null, '{$user}')"; 
mysql_query($query) OR die(mysql_error()); 

var_dump($user); 

?> 

瓦爾轉儲輸出是字符串 'O \' relly '存儲爲(長度= 8) 但在DB' 看起來像MySQL條在插入數據庫之前斜線。這是真的?如何插入斜線在MySQL數據庫

+1

你覺得'addslashes'的意思是?如果它對數據庫沒有影響,那將是毫無意義的。儘管如此,它仍然是沒有意義的,因爲它沒有足夠的保護。如果你打算使用手動轉義,可以使用['mysql_real_escape_string'](http://php.net/manual/en/function.mysql-real-escape-string.php),但你應該使用[給出的東西你綁定參數](http://bobby-tables.com/php.html)。 – Quentin 2012-02-06 16:57:12

回答

1

SQL不會去掉反斜槓,它會在解析命令時正確解釋它。如果沒有斜槓,SQL會看到

INSERT INTO makes VALUES(null, 'O'relly') 

這是字符串「O」後跟一個語法錯誤。 (或者更糟糕的是:這可以用於恐懼的「SQL注入攻擊」)。

總之,這是按預期工作的。

+0

好的,但如果我在數據庫中添加「O \'relly'將是O'relly – Yaroslav 2012-02-06 18:06:33

+0

是的,這就是它的意思。你爲什麼不告訴我們你想把*添加到數據庫中,我們可以告訴你如何去做。 – alexis 2012-02-15 18:27:00