我把使用者通過post發過來的資料"my'name"通過addslashes函數進行過濾,然後存入mysql。
但是當我在php指令碼頁面執行
$conn = new mysqli('127.0.0.1','root','','book_sc');
$re = $conn->query("select * from sc where title='"."my'name"."'");
var_dump($re->num_rows); //返回是NULL
但是在mysql裡執行命令
mysql> select * from sc where title="my'name";
或者
mysql> select * from sc where title="my\'name";
都可以查詢到這條資料,那為什麼在php指令碼頁面執行就返回null呢?
還有就是過濾的函數還有strip_tags、htmlspespecialchars分別用於過濾掉html、php代碼和轉義html代碼以保證資料的安全性,那我是不是需要把這3個函數都用上?
回複內容:
我把使用者通過post發過來的資料"my'name"通過addslashes函數進行過濾,然後存入mysql。
但是當我在php指令碼頁面執行
$conn = new mysqli('127.0.0.1','root','','book_sc');
$re = $conn->query("select * from sc where title='"."my'name"."'");
var_dump($re->num_rows); //返回是NULL
但是在mysql裡執行命令
mysql> select * from sc where title="my'name";
或者
mysql> select * from sc where title="my\'name";
都可以查詢到這條資料,那為什麼在php指令碼頁面執行就返回null呢?
還有就是過濾的函數還有strip_tags、htmlspespecialchars分別用於過濾掉html、php代碼和轉義html代碼以保證資料的安全性,那我是不是需要把這3個函數都用上?
我很奇怪你執行 $re = $conn->query("select * from sc where title='"."my'name"."'");
怎麼沒有報錯? 很明顯這sql就有錯誤。
應該這樣 $conn->query("select * from sc where title='my\'name'")