2013-10-19 68 views
1

我會盡量簡練,只在這裏顯示相關信息:奇怪的行爲與MySQL和PHP pdo,最新錯誤?

我有兩個幾乎相同的代碼段,一個可以工作,另一個不可以。

$query = $pdo->prepare("SELECT * FROM active_notifications WHERE direction = '>' AND $usdCurrent > trigger_price AND currency = '$'"); 
$query->execute(); 
var_dump($query); 

$result = $query->fetchall((PDO::FETCH_ASSOC)); 
var_dump($result); 

上面的代碼工作,當我VAR轉儲查詢它看起來像這樣:

SELECT * FROM active_notifications WHERE direction = '>' AND 182.62000 > trigger_price AND currency = '$' 

當我嘗試用一​​個稍微不同的代碼,我換了$符號出現我的問題一個£符號

下面是代碼:

$query = $pdo->prepare("SELECT * FROM active_notifications WHERE direction = '>' AND $gbpCurrent > trigger_price AND currency = '£'"); 
$query->execute(); 
var_dump($query); 

$result = $query->fetchall((PDO::FETCH_ASSOC)); 

var_dump($result); 

當我VAR轉儲查詢我得到ŧ他:

SELECT * FROM active_notifications WHERE direction = '>' AND 114.19942 > trigger_price AND currency = '£' 

因此,所有是正確的了這一點,

當我直接在phpMyAdmin預期的結果返回運行任創建的查詢,但是當我的var_dump的£英鎊查詢我的$結果得到一個空數組。

起初我雖然可能是因爲我重複使用變量名,但我試圖完全隔離,美元查詢總是起作用,GBP永遠不會工作,並總是導致返回一個空數組。

就像我說的兩個生成的查詢在phpMyAdmin正常工作(當在數據庫中直接運行)

唯一的區別是,在一個查詢我有一個£符號和其他我有一個$符號,

英鎊符號是PHP中的一種不允許的符號或類似的東西嗎?

感謝, 約翰

+1

檢查php和mysql字符編碼。我在想你的php的'''和你的mysql的'''不一樣。理想情況下,您可以避免使用'gpb','usd'等等貨幣字段的所有混亂。 – Shomz

+0

你究竟是什麼意思?我怎麼做? – Woodstock

+1

你傳說中,我只是把這個放到了我的pdo init中:PDO :: MYSQL_ATTR_INIT_COMMAND =>「SET NAMES utf8」,所有這些都很好,希望這是正確的?似乎工作,如果你想要把答案我會標記爲正確的歡呼 – Woodstock

回答

3

檢查PHP和MySQL的字符編碼。我在想你的php的£和你的mysql的£不一樣。

理想情況下,您可以通過使用'gpb''usd'等等爲貨幣字段避免所有的混亂。

從OP:

我只是拍打到我的PDO初始化這樣的:PDO :: MYSQL_ATTR_INIT_COMMAND => 「組名稱UTF8」和一切都很好。