PDO查询返回0

时间:2014-09-11 13:50:49

标签: php mysql sql pdo

我正在尝试执行一个正在运行且一个不是

的查询

代码:

    $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

如果我在数据库编辑器工具中执行第一个,我得到结果:

result

为什么第一个查询不返回任何内容?为什么第二个查询返回了什么?即使他们是一样的?

2 个答案:

答案 0 :(得分:1)

我没有发现任何特定的错误。

但名单上的第一个嫌疑人是bindParam。对于调试,我尝试使用标量,并回显值。

$service_param = $this->_settings->service;
var_dump($service_param); 
$sth->bindParam(":service", $this->_settings->service, PDO::PARAM_INT);

为了进行调试,我还尝试删除LIMIT的绑定占位符,并在语句中对其进行硬编码。


由于没有检查“prepare”和“execute”函数的返回,所以我假设P​​DO错误模式设置为在发生数据库错误时抛出异常。也就是说,我假设数据库连接设置了这些属性:

$this->_pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

答案 1 :(得分:0)

我发现了各种错误。

1 :(删除忽略)

2:你的限制条款应为0,某事。在那里放1可以跳过1条记录。