因此,PHP在處理字符串中的字符最近在我的一個項目中遇到了很多麻煩,我認爲背後的主要原因這是由於一些瘋狂的原因,它將\字符加倍。我已經檢查過,並且魔術引號已關閉(所以這不是罪魁禍首)。不管怎麼說,給出下面的代碼:PHP是加倍字符(這是打破mysql_real_escape_string,PDO->報價等)
26 $comments = $_POST['comments'];
27 error_log("comments: '$comments'");
28 $comments = mysql_real_escape_string($_POST['comments']);
29 error_log("escaped comments: '$comments'");
我看到在錯誤日誌如下:
[Sun Oct 19 14:18:53 2014] [error] [client XXXX] comments: 'something elsewearwerawer's woeimrowiamrw', referer: ...
[Sun Oct 19 14:18:53 2014] [error] [client XXXX] comments escaped: 'something elsewearwerawer\\'s woeimrowiamrw', referer: ...
更糟糕的是,我仍然看到了以PDO交換的東西后,相同的行爲:
error_log("quoted: '" . $db_pdo->quote($comments) . "'");
即使我喜歡簡單的東西:
error_log('\\');
個
或
error_log("\\");
錯誤日誌顯示:
[Sun Oct 19 17:44:57 2014] [error] [client XXXX] \\, referer: ...
任何想法是怎麼回事?我很擔心,因爲它看起來像這意味着mysql_real_escape_string(或PDO)不能正確地轉義字符串中的單引號,這可能導致SQL注入。每當我試着用字符串更新/插入了「在裏面,甚至稱mysql_real_escape_string後或使用引號(或bindParam用字符串),它不插入任何後」
解決:後深入挖掘它實際上正確地將事物插入到數據庫中,錯誤發生在網頁從數據庫中拉出而未處理正確的事情的另一端,所以它在html中被切斷。
你在Apache中運行這個? – Austin 2014-10-19 22:57:50
不,他使用error_log()將它記錄到Apache的日誌文件中。 – 2014-10-19 23:00:51
您是否完成了變量的var_dump();如果是,結果如何? – jeroen 2014-10-19 23:14:33