作者milua (milua)
看板PHP
標題[請益] utf-8在sql加料?
時間Thu May 26 09:33:34 2011
各位先進好,小弟遇到一個百思不解的問題
發出來想與各位先進請益
下面是一段我寫的sql 看似非常普通
$sql2 = "SELECT bill_number,bill_kind FROM bill_common where
department_id=$department_id order by bill_id";
$result2 = mysql_query($sql2,$link);
$total2= mysql_num_rows($result2);
for($i=0;$i<$count;$i++){
$bill_number = mysql_result($result2,$i,0);
$bill_kind=mysql_result($result2,$i,1);
$sql4="select * from bill where bill_date like '%$bill_date%' and
bill_number='$bill_number' and bill_state=2";
$result4 = mysql_query($sql4,$link);
$total4= mysql_num_rows($result4);
}
神奇的事情發生了,在跑迴圈的過程中,$sql4的語法除了第一次迴圈query會失敗之外
其餘迴圈處理的都會query成功
我把$sql4 echo出來貼到phpmyadmin裡面去看,它是寫
截圖 :
http://ppt.cc/m-~c
#1064 - You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near
'ïSELECT * from bill where bill_date like '%2011-05-26%' AND
bill_number='D01-1' at line 1
看起來應該是unicode造成的亂碼 不過我試過 $sql4=trim($sql4);
也還是無解,整個站兩三百條sql就這麼一條會出問題
實在是沒有遇過這樣的狀況
煩請各為先進給予指教
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.126.202.170
1F:推 mrbigmouth:$bill_number跟$bill_date最好做mysql_escape_string處 05/26 10:28
2F:→ mrbigmouth:裡 這樣試試? 05/26 10:28
3F:→ mrbigmouth:如果你的apache沒開magic_quotes 所有mysql字串都要記 05/26 10:30
4F:→ mrbigmouth:得處理 如果有開 那沒經過server處理的字串也要記得補 05/26 10:31
5F:→ mrbigmouth:上處理 比如說本例中的$bill_number是從資料庫取出的字 05/26 10:32
6F:→ milua:謝謝樓上 我把我的做法編輯一下~ 05/26 10:32
7F:→ mrbigmouth:串...裡面如果含有mysql特殊字元就會產生錯誤 05/26 10:32
8F:→ milua:我昨天也有試過$sql4=sprint("xxxxx '%s'),mysql_escape_str 05/26 10:33
9F:→ milua:ing處理 還是一樣的結果 05/26 10:33
10F:→ milua:不過我會再試試看:) 謝謝 05/26 10:34
11F:→ milua:解決了~變數都先trim乾淨 05/29 09:37