我正在尝试执行一个正在运行且一个不是
的查询代码:
$sth = $this->_pdo->prepare("SELECT * FROM `messages` WHERE `service_id` = :service AND `created` > (NOW() - INTERVAL 7 DAY) LIMIT 1, :limit");
$leng = $this->_settings->length;
$sth->bindParam(":service", $this->_settings->service, PDO::PARAM_INT);
$sth->bindParam(":limit", $leng, PDO::PARAM_INT);
$sth->execute();
$component_data = $sth->fetchAll(PDO::FETCH_OBJ);
var_dump($component_data);
回显值:SELECT * FROM
消息WHERE
service_id = 3 AND
已创建> (NOW() - INTERVAL 7 DAY) LIMIT 1, 5
此查询无法正常工作
,这是:SELECT * FROM
消息WHERE
service_id = 2 AND
已创建> (NOW() - INTERVAL 7 DAY) LIMIT 1, 5
如果我在数据库编辑器工具中执行第一个,我得到结果:
为什么第一个查询不返回任何内容?为什么第二个查询返回了什么?即使他们是一样的?
答案 0 :(得分:1)
我没有发现任何特定的错误。
但名单上的第一个嫌疑人是bindParam
。对于调试,我尝试使用标量,并回显值。
$service_param = $this->_settings->service;
var_dump($service_param);
$sth->bindParam(":service", $this->_settings->service, PDO::PARAM_INT);
为了进行调试,我还尝试删除LIMIT的绑定占位符,并在语句中对其进行硬编码。
由于没有检查“prepare”和“execute”函数的返回,所以我假设PDO错误模式设置为在发生数据库错误时抛出异常。也就是说,我假设数据库连接设置了这些属性:
$this->_pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
答案 1 :(得分:0)
我发现了各种错误。
1 :(删除忽略)
2:你的限制条款应为0,某事。在那里放1可以跳过1条记录。