注意:以下示例中的唯一区别是ORDER BY子句。
好代码:
$sql = 'SELECT [date], ? AS [name]
FROM [transactions]
WHERE [category_id] = 10
GROUP BY [date]
ORDER BY [date] ASC';
$stmt = $db->prepare($sql);
$stmt->bindValue(1, 'Test', PDO::PARAM_STR);
$stmt->execute();
$data = $stmt->fetchAll();
//returns rows in $data
错误代码:
$sql = 'SELECT [date], ? AS [name]
FROM [transactions]
WHERE [category_id] = 10
GROUP BY [date]
ORDER BY [date] ASC, [name] ASC';
$stmt = $db->prepare($sql);
$stmt->bindValue(1, 'Test', PDO::PARAM_STR);
$stmt->execute();
$data = $stmt->fetchAll();
//returns an empty array
为什么我的第二个代码块不起作用?如果我直接运行此查询的任一版本(在 SQL Management Studio 中),则无论哪种方式都可以。如果我去掉 PHP 中的问号并将值硬编码到查询中(而不是绑定它),那也可以!这里发生了什么?
更新:这是一个更好地说明问题的示例 PHP 脚本:http: //snipt.org/ALhd1。在这个链接的示例代码中,我包含了 5 个“测试”。测试 #1、2 和 4 都返回结果,而测试 #3 和 5 没有并且应该说明问题。