【发布时间】:2017-10-16 11:35:39
【问题描述】:
我正在尝试使用 PHP PDO 库对 pgSQL 数据库表运行以下查询
SELECT COUNT(*) AS overall, COUNT(IF(username = ?, TRUE, NULL)) AS unames FROM login_attempt WHERE last_checked > NOW() - INTERVAL ? MICROSECOND
但出现以下错误
错误:SQLSTATE[42601]:语法错误:7 错误:“$2”处或附近的语法错误第 1 行:...gin_attempt WHERE last_checked > NOW() - INTERVAL $2 MICROSE... ^
这是我的完整功能代码
private function isQueueSizeExceeded()
{
$sql = "SELECT COUNT(*) AS overall, COUNT(IF(username = :uname, TRUE, NULL)) AS unames FROM login_attempt WHERE last_checked > NOW() - INTERVAL :itime MICROSECOND";
$stmt = $this->pdo->prepare($sql);
$itime= 5000 * 1000;
$stmt->bindParam(':uname', $this->username);
$stmt->bindParam(':itime', $itime);
$stmt->execute();
$count = $stmt->fetch(PDO::FETCH_OBJ);
if (!$count) {
throw new Exception("Failed to query queue size", 500);
}
return ($count->overall >= self::MAX_OVERALL || $count->unames >= self::MAX_PER_USER);
}
此代码预计将使用 MySQL 运行,但我正在尝试使用 postgreSQL 运行
【问题讨论】:
-
Postgres 和 MySQL 有一些非常不同的语法。你为什么希望它运行没有错误?
-
postgres
IF是 plpgsql,使用CASE WHEN代替 sql
标签: php mysql sql postgresql pdo