【发布时间】:2019-09-27 16:08:18
【问题描述】:
我正在尝试获取在过去 35 分钟内添加的行。字段日程表的类型为日期时间(YYYY-MM-DD HH:ii:ss)。当我复制完全相同的查询并粘贴到 phpmyadmin 时,它可以正常工作,但是在我使用 pdo 的 php 代码中,它可以根据自己的意愿工作(哈哈)。有时它会正确返回,并且在几秒钟内它不再返回任何结果,然后再次工作。也没有返回错误 var_dump($_SESSION['userid']) 正在返回预期值。
我的php代码:
function db_exec($conn,$sql,$values=null){
$sth = $conn->prepare($sql);
if($values!=null)
foreach($values as $key => $value){
$index=++$key;
$sth->bindValue($index,$value);
}
$sth->execute();
return $sth;
}
$agendamentos=db_exec($dbread,"SELECT agendamentos.id as id, agendamentos.userid as userid,
agendamentos.paciente as paciente,agendamentos.agendadoPara as agendadoPara,usuarios.nome as nome,
usuarios.contaTipo as contaTipo, profissionais.sexo as sexo, profissionais.profissao as profissaoId,
tipoProfissionalPF.tipo as profissao,tipoProfissionalPF.urlprefix as urlprefix, tipoProfissionalPJ.tipo as estabelecimento,
tipoProfissionalPJ.urlprefix as clinprefix,empresaDados.nomeFantasia as nomeFantasia
FROM agendamentos
LEFT JOIN usuarios ON usuarios.id=agendamentos.userid
LEFT JOIN profissionais ON profissionais.userid=agendamentos.userid
LEFT JOIN empresaDados ON empresaDados.userid=agendamentos.userid
LEFT JOIN tipoProfissionalPF ON tipoProfissionalPF.id=profissionais.profissao
LEFT JOIN tipoProfissionalPJ ON tipoProfissionalPJ.id=empresaDados.tipoProfissionalPJ
WHERE agendamentos.paciente=? AND agendamentos.confirmado=0 AND TIMESTAMPDIFF(MINUTE,agendamentos.agendadoEm,NOW())<35",array($_SESSION['userid']));
if($agendamentos->rowCount()>0)
echo 'ok';
else
echo 'none';
正如我之前所说,有时它会起作用,但几分钟后它就不再起作用了。通过在 phpmyadmin 上运行此查询始终有效,即使它不在我的 php 页面上运行。 有谁知道我做错了什么?对我来说是个谜,我没有找出问题所在。
【问题讨论】:
-
“没有错误返回” - 你检查了 PDO 错误还是设置了
PDO::ERRMODE_EXCEPTION? -
根据 PDOStatement::rowCount 的文档:如果关联的 PDOStatement 执行的最后一条 SQL 语句是 SELECT 语句,则某些数据库可能会返回该语句返回的行数。但是,并非所有数据库都保证此行为,并且不应依赖于可移植应用程序。相反,您应该在执行 SELECT 之后发出 PDOStatement::fetchAll 调用,然后计算返回的实际行数。
-
@Jeff 我已经设置了 PDO::ERRMODE_EXCEPTION
-
@RonaldAaronson 同样的问题,兄弟!我曾想象它不会工作,因为我使用 rowCount 完成了所有应用程序并且它工作得很好,但我真的很感激你的建议,下次我会接受这个建议。但是现在我仍然坚持这个问题。