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

看板PHP作者 (香蕉共和國)時間9年前 (2015/06/13 11:17), 9年前編輯推噓1(1039)
留言40則, 5人參與, 最新討論串1/1
$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 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 219.80.130.92 ※ 文章網址: https://www.ptt.cc/bbs/PHP/M.1434165464.A.850.html ※ 編輯: banana2014 (219.80.130.92), 06/13/2015 11:18:08

06/13 12:39, , 1F
06/13 12:39, 1F

06/13 12:40, , 2F
寫兩次不夠,你要寫四次,跟Java一樣
06/13 12:40, 2F

06/13 12:41, , 3F
另外(1)mysql_*系列已經作古了。(2)如果還非用mysql_*
06/13 12:41, 3F

06/13 12:42, , 4F
系列,起碼*_real_escape_string()用一下。
06/13 12:42, 4F

06/13 12:52, , 5F
TO MOONRAKER:但是我寫四次反斜線它會跑出一些不相關
06/13 12:52, 5F

06/13 12:53, , 6F
的資料出來,而並非所有含有反斜線的資料都會被列出來
06/13 12:53, 6F

06/13 12:54, , 7F
這就是奇怪的一點
06/13 12:54, 7F
例如我的資料表有欄位(xxx),其資料如下: +-------------------------------------------+ | xxx | +===========================================+ | Happy % ^_^ | | Hello! \Hello\ | | /\?"' | | ~!@#$%^&*()_+|}{":?><`1234567890-=\][';/.,| | Oh! My God!!! | +-------------------------------------------+ 照理來講應該要列出「Hello! \Hello\」、「/\?"'」、「~!@#$%^&*()_+|}{":?><`1234567890-=\][';/.,」這三筆資料的, 但是它卻只列出「Happy % ^_^」和「~!@#$%^&*()_+|}{":?><`1234567890-=\][';/.,」這兩筆資料, 該列出的它沒列出(只有列出一筆),而不該列出的它卻列出了,這是為什麼呢? ※ 編輯: banana2014 (219.80.128.18), 06/13/2015 13:13:59

06/13 13:16, , 8F
您給的頁面有人提議用「ESCAPE '|'」的方法來避免這種
06/13 13:16, 8F

06/13 13:17, , 9F
反斜線問題的發生,不過這樣就變成說「|」也有問題了
06/13 13:17, 9F

06/13 13:18, , 10F
這只是把問題移轉給另一個符號而已,並不會把該問題徹
06/13 13:18, 10F

06/13 13:20, , 11F
底解決,所以有無更好的方法能解決這個「MySQL反斜線
06/13 13:20, 11F

06/13 13:20, , 12F
問題」呢? 謝謝
06/13 13:20, 12F

06/13 13:25, , 13F
……我覺得你先加那個mysql_real_escape_string()
06/13 13:25, 13F

06/13 13:27, , 14F
然後再試… 一個\到四個\都試一試…
06/13 13:27, 14F

06/13 14:40, , 15F
會叫出有%的資料 應該是你查詢打錯了 像是:"%\\%%"
06/13 14:40, 15F

06/13 14:40, , 16F
列出的資料都是含有%
06/13 14:40, 16F

06/13 14:46, , 17F
沒有喔 我是打"%\\\\%" 像這樣喔 但是很奇怪的就是我
06/13 14:46, 17F

06/13 14:47, , 18F
不管照你們的方式怎麼打(包括加mysql_real_escape_str
06/13 14:47, 18F

06/13 14:48, , 19F
它依舊跑出一樣的結果 很奇怪
06/13 14:48, 19F
<? $search="\\\\"; $link=mysql_connect("localhost","xxx","ooo"); mysql_select_db("xxx",$link); mysql_query("SET NAMES UTF8"); $search=mysql_real_escape_string($search); if($search){ $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); ?> 像以上的結果會是什麼都沒有顯示,請問該怎麼解決呢? ※ 編輯: banana2014 (219.80.128.18), 06/13/2015 14:55:00

06/13 18:40, , 20F
"\\\\" 不加 real_escape ,或 "\\" 加 real_escape
06/13 18:40, 20F

06/13 18:42, , 21F
不然就開 client tool 直接去 db 下 query 下到滿意再
06/13 18:42, 21F

06/13 18:42, , 22F
回來看怎麼用 PHP 組出要的 query 阿
06/13 18:42, 22F

06/14 04:47, , 23F
$search="\\"; => PHP結果 => 字串 \
06/14 04:47, 23F

06/14 04:47, , 24F
'%$search%'; => MySQL接收到 '%\%'
06/14 04:47, 24F

06/14 04:48, , 25F
=> 找前面任意字元,且結尾是 % 的資料 => 所以找不到
06/14 04:48, 25F

06/14 04:49, , 26F
同理,$search="\\\\"; 傳給MySQL是 '%\\%';
06/14 04:49, 26F

06/14 04:53, , 27F
總之,\ 同時是PHP和MySQL的特殊字元
06/14 04:53, 27F

06/14 12:02, , 28F
TO xxxzzz:照理來講$search="\\\\"傳給MySQL的搜尋條
06/14 12:02, 28F

06/14 12:04, , 29F
件是找中間是反斜線、前後是任意字元的資料,但是我輸
06/14 12:04, 29F

06/14 12:06, , 30F
入$search="\\\\"後(在沒有加mysql_real_escape_str時
06/14 12:06, 30F

06/14 12:07, , 31F
),它的搜尋結果竟然跟$search="\\"的結果是一樣的,
06/14 12:07, 31F

06/14 12:08, , 32F
都是那兩筆含有「%」符號的資料,總不可能MySQL是從後
06/14 12:08, 32F

06/14 12:09, , 33F
面讀取字串的吧... 不然怎麼又會把它理解成前面任意字
06/14 12:09, 33F

06/14 12:11, , 34F
元、後面一槓反斜線加「%」的符號呢? (其實這樣也不應
06/14 12:11, 34F

06/14 12:13, , 35F
該顯示出任何結果的,因為根本沒有資料的末端兩字元會
06/14 12:13, 35F

06/14 12:14, , 36F
是一槓反斜線加「%」符號,所以這才是我覺得非常奇怪
06/14 12:14, 36F

06/14 12:14, , 37F
的一點)。
06/14 12:14, 37F

06/14 13:08, , 38F
你跑資料庫是用什麼? 免費空間嗎?
06/14 13:08, 38F

06/14 15:23, , 39F
MySQL 租虛擬主機
06/14 15:23, 39F

06/14 15:24, , 40F
不曉得各位試試後有沒有問題
06/14 15:24, 40F
文章代碼(AID): #1LUw3OXG (PHP)
文章代碼(AID): #1LUw3OXG (PHP)