[問題] 請問PHP MySQL要如何查詢反斜線(\)符號?

作者: banana2014 (香蕉共和國)   2015-06-13 11:17:42
$search="\\";
$link=mysql_connect("localhost","xxx","ooo");
mysql_select_db("xxx",$link);
$str="select xxx from ooo where xxx like '%$search%'";
$list=mysql_query($str,$link);
while(list($xxx)=mysql_fetch_row($list)){
echo $xxx."<br>";
}
mysql_close($link);
...
像上面我要查詢欄位xxx中含有反斜線(\)的所有資料並全部提取出來,但是查詢出來的結
果卻是空無一物,但明明xxx欄位有含有反斜線(\)的資料,這是為什麼呢?
*從資料表ooo提取欄位xxx所有含「反斜線(\)」的資料,其中MySQL的帳號是xxx、密碼是
ooo、資料庫名稱是xxx
作者: MOONRAKER (㊣牛鶴鰻毛人)   2015-06-13 12:39:00
http://goo.gl/M1UZL6寫兩次不夠,你要寫四次,跟Java一樣另外(1)mysql_*系列已經作古了。(2)如果還非用mysql_*系列,起碼*_real_escape_string()用一下。
作者: banana2014 (香蕉共和國)   2015-06-13 12:52:00
TO MOONRAKER:但是我寫四次反斜線它會跑出一些不相關的資料出來,而並非所有含有反斜線的資料都會被列出來這就是奇怪的一點您給的頁面有人提議用「ESCAPE '|'」的方法來避免這種反斜線問題的發生,不過這樣就變成說「|」也有問題了這只是把問題移轉給另一個符號而已,並不會把該問題徹底解決,所以有無更好的方法能解決這個「MySQL反斜線問題」呢? 謝謝
作者: MOONRAKER (㊣牛鶴鰻毛人)   2015-06-13 13:25:00
……我覺得你先加那個mysql_real_escape_string()然後再試… 一個\到四個\都試一試…
作者: wotupset (wotupset)   2015-06-13 14:40:00
會叫出有%的資料 應該是你查詢打錯了 像是:"%\\%%"列出的資料都是含有%
作者: banana2014 (香蕉共和國)   2015-06-13 14:46:00
沒有喔 我是打"%\\\\%" 像這樣喔 但是很奇怪的就是我不管照你們的方式怎麼打(包括加mysql_real_escape_str它依舊跑出一樣的結果 很奇怪
作者: Darkland (小黑XDrz)   2015-06-13 18:40:00
"\\\\" 不加 real_escape ,或 "\\" 加 real_escape不然就開 client tool 直接去 db 下 query 下到滿意再回來看怎麼用 PHP 組出要的 query 阿
作者: xxxzzz (...)   2015-06-14 04:47:00
$search="\\"; => PHP結果 => 字串 \'%$search%'; => MySQL接收到 '%\%'=> 找前面任意字元,且結尾是 % 的資料 => 所以找不到同理,$search="\\\\"; 傳給MySQL是 '%\\%';總之,\ 同時是PHP和MySQL的特殊字元
作者: banana2014 (香蕉共和國)   2015-06-14 12:02:00
TO xxxzzz:照理來講$search="\\\\"傳給MySQL的搜尋條件是找中間是反斜線、前後是任意字元的資料,但是我輸入$search="\\\\"後(在沒有加mysql_real_escape_str時),它的搜尋結果竟然跟$search="\\"的結果是一樣的,都是那兩筆含有「%」符號的資料,總不可能MySQL是從後面讀取字串的吧... 不然怎麼又會把它理解成前面任意字元、後面一槓反斜線加「%」的符號呢? (其實這樣也不應該顯示出任何結果的,因為根本沒有資料的末端兩字元會是一槓反斜線加「%」符號,所以這才是我覺得非常奇怪的一點)。
作者: wotupset (wotupset)   2015-06-14 13:08:00
你跑資料庫是用什麼? 免費空間嗎?
作者: banana2014 (香蕉共和國)   2015-06-14 15:23:00
MySQL 租虛擬主機不曉得各位試試後有沒有問題

Links booklink

Contact Us: admin [ a t ] ucptt.com