【问题标题】:Different SQL result with same query in PHP and MySQL在 PHP 和 MySQL 中具有相同查询的不同 SQL 结果
【发布时间】:2013-06-23 08:04:47
【问题描述】:

经过快速搜索,我没有找到解决问题的方法,所以我发布了一个新问题。

所以我必须从 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 local MySQL Database 上执行这个请求时,我得到一个 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 中的结果相同)

感谢您的帮助

【问题讨论】:

  • 取出不在您的 php 结果中的行,然后查看所有列以发现其他列之间的奇怪或不同之处。也许是字符集问题
  • 有人应该投票关闭它,因为它“过于本地化”。如果可以的话,我会的。

标签: php mysql sql pear


【解决方案1】:

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

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

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

为了比较,你可以使用这个查询:

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

【讨论】:

  • 问题来自字符集,但显然不是 PHP 和 MySQL 之间的问题,而是我从用户那里得到的文本。所以我在执行 resquest 之前使用 utf8_decode($values['request']) 。我已经统一了 PHP 和 MySQL 之间的字符集
猜你喜欢
  • 2016-02-08
  • 1970-01-01
  • 1970-01-01
  • 2015-01-01
  • 1970-01-01
  • 2019-06-25
  • 1970-01-01
  • 2013-07-15
  • 1970-01-01
相关资源
最近更新 更多