2013-06-26 41 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

相关问题