PHP和MySQL中具有相同查询的不同SQL结果

时间:2013-06-26 09:01:34

标签: php mysql sql pear

快速搜索后,我找不到问题的解决方案,所以我发布了一个新问题。

所以我必须从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$%');

当我直接在mon本地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中的结果相同)

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

请注意,对于您在查询中包含的任何字符串值,您与数据库的连接也有CHARSETCOLLATION。虽然在两种情况下您的查询看起来都一样,但它不能从MySQL服务器的角度来看。

当您通过PHP连接时,通过MySQL控制台连接时,客户端CHARSET(和/或COLLATION)可能会有所不同。

请参阅MySQL manual for more information on the client charset and collation

为了进行比较,您可以使用此查询:

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