2013-06-26 83 views
0

快速搜索後,我找不到解決方案,因此我發佈了一個新問題。在PHP和MySQL中使用相同查詢的不同SQL結果

所以我必須從Web界面(使用PHP)在MySQL數據庫中創建視圖。

我使用PEAR框架與MySQL的連接(5.0.26)

我有SQL請求:

CREATE VIEW test AS SELECT cswc.code_de_la_copie, cswc.service_de_reference, cswc.libelle_de_la_copie, cswc.direction_de_securite_logique 
FROM pressi_copiesServiceWithCibles cswc LEFT OUTER JOIN pressi_servicesReferenceWithCibles srwc ON cswc.service_de_reference = srwc.code_du_service 
WHERE cswc.cible is null 
    AND (srwc.cible LIKE '%£DOMAIN£%' OR srwc.cible LIKE '%$DOMAIN$%'); 

當我直接於星期一本地MySQL數據庫執行此請求,我得到結果有470行。然而,當我在我的PHP代碼中執行這個請求時,我得到了不同的結果(我有386行),我不知道爲什麼!

$values['request'] = "SELECT cswc.code_de_la_copie, cswc.service_de_reference, cswc.libelle_de_la_copie, cswc.direction_de_securite_logique 
FROM pressi_copiesServiceWithCibles cswc LEFT OUTER JOIN pressi_servicesReferenceWithCibles srwc ON cswc.service_de_reference = srwc.code_du_service 
WHERE cswc.cible is null 
    AND (srwc.cible LIKE '%£DOMAIN£%' OR srwc.cible LIKE '%$DOMAIN$%');"; 

$baseView = "test"; 

$sqlView = 'CREATE VIEW '.$baseView.' AS '.$values['request']; 
$res =& $this->mdb2->query($sqlView); 
if (PEAR::isError($res)) { 
    return false; 
} 

而且,我已經創建此人之前6次沒有任何問題(同樣的結果在PHP和MySQL的)

謝謝您的幫助

+0

拿出不在你的PHP結果中的行,然後看看所有列找一些奇怪或其他人之間的不同。也許charset問題 – Aleeeeee

+0

有人應該投票結束這個「過於本地化」。如果我可以的話我會。 –

回答

1

請注意,您連接到數據庫對於包含在查詢中的任何字符串值,還有CHARSETCOLLATION。雖然在這兩種情況下你的查詢看起來都一樣,但它不能從MySQL服務器的角度來看。

也許客戶端CHARSET(和/或COLLATION)通過PHP連接時與通過MySQL控制檯連接時有所不同。

查看MySQL manual for more information on the client charset and collation

爲了進行比較,您可以使用此查詢:

SHOW VARIABLES LIKE 'character_set%'; 
SHOW VARIABLES LIKE 'collation%'; 
+0

問題來自charset,但顯然不是在PHP和MySQL之間,而是來自用戶的文本。所以我在執行resquest之前使用utf8_decode($ values ['request'])。我已經統一了PHP和MySQL之間的字符集 – Ark4ntes

相關問題