我正在使用MySQLWorkbench
在我的开发服务器中测试我的SQL,这与我PHP application
中运行的SQL相同。
SQL就是这个:
SELECT CalendarioLaboratorio.laboratorio, CalendarioLaboratorio.asignatura, Calendario.horaInicio, Calendario.horaFin
FROM CalendarioLaboratorio, Calendario
WHERE Calendario.dia = dayofweek(now())
AND time(subtime(now(), '01:00:00')) >= Calendario.horaInicio
AND time(subtime(now(), '01:00:00')) <= Calendario.horaFin
AND CalendarioLaboratorio.calencario = Calendario.id
AND CalendarioLaboratorio.laboratorio = :laboratorio;
注意: :laboratorio
在php预编译语句中获得正确的值。
Probabbly并未进行最佳优化,但我只想尝试使用我的开发应用程序,IDE可以完美地完成查询,但我的应用程序会显示此错误。
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.dia = dayofweek(now()) AND time(subtime(now(), '01:00:00')) >= Calendario.horaI' at line 1
我正在使用查询的PHP代码
public static function getCalendarioByNow($laboratorio)
{
$conector = new Conexion("localhost","admin_hectorapp");
try
{
$con = $conector->Conectar();
$con->exec('SET CHARACTER SET utf8');
$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$consulta = $con->prepare("SELECT CalendarioLaboratorio.laboratorio, CalendarioLaboratorio.asignatura, Calendario.horaInicio, Calendario.horaFin FROM CalendarioLaboratorio, Calendario WHERE Calendario.dia = dayofweek(now()) AND time(subtime(now(), '01:00:00')) >= Calendario.horaInicio AND time(subtime(now(), '01:00:00')) <= Calendario.horaFin AND CalendarioLaboratorio.calencario = Calendario.id AND CalendarioLaboratorio.laboratorio = :laboratorio;");
$consulta->bindParam(':laboratorio', $laboratorio);
$dato = array('laboratorio'=>$laboratorio);
$consulta->execute($dato);
$conector = null;
$con = null;
return $consulta;
}
catch (Exception $e)
{
$conector = null;
$con = null;
throw $e;
}
}