MySQL和PHP pdo的奇怪行为,怎么回事?

时间:2013-10-19 12:54:57

标签: php mysql database 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);

以上代码有效,当我转储查询时,它看起来像这样:

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);

当我转储查询时,我得到了这个:

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

所以到目前为止一切都是正确的,

当我在PhpMyAdmin中直接运行任一创建的查询时,会返回预期的结果,但是当我var_dump $ gbp查询的$ result时,我得到一个空数组。

起初我虽然可能是因为我正在重复使用变量名称,但我在完全隔离时尝试了两者,USD查询始终有效且GBP永远不会工作并且总是导致返回空数组。

就像我说的那样,两个生成的查询在PhpMyAdmin中正常工作(直接针对数据库运行时)

唯一的区别是,在一个查询中,我有一个£符号,另一个我有$符号,

在PHP中,£符号是否是某种不允许的符号?

谢谢, 约翰

1 个答案:

答案 0 :(得分:3)

检查php和mysql字符编码。我认为你的php £与你的mysql £不一样。

理想情况下,您可以使用'gpb''usd'等货币字段来避免所有混乱。

来自OP:

  

我刚把它打到我的pdo init中: PDO :: MYSQL_ATTR_INIT_COMMAND => “SET NAMES utf8”,一切都很好。