我会尽量简明扼要,只在这里显示相关信息:
我有两个几乎相同的代码片段,一个有效,另一个没有。
$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中,£符号是否是某种不允许的符号?
谢谢, 约翰
答案 0 :(得分:3)
检查php和mysql字符编码。我认为你的php £
与你的mysql £
不一样。
理想情况下,您可以使用'gpb'
,'usd'
等货币字段来避免所有混乱。
来自OP:
我刚把它打到我的pdo init中: PDO :: MYSQL_ATTR_INIT_COMMAND => “SET NAMES utf8”,一切都很好。