Php 在postgreSQL中运行查询时出现SQL错误42601

Php 在postgreSQL中运行查询时出现SQL错误42601,php,mysql,sql,postgresql,pdo,Php,Mysql,Sql,Postgresql,Pdo,我试图使用PHPPDO库对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处或附近出现语法错误:…上次选中的位置尝试的次数>现在

我试图使用PHPPDO库对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处或附近出现语法错误:…上次选中的位置尝试的次数>现在()^

这是我完整的函数代码

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运行
数据类型“string”
语法仅适用于字符串文本,并且
微秒必须是字符串的一部分

您可以改用类型转换:

... current_timestamp - CAST((:itime || ' microseconds') AS interval)

Postgres和MySQL有一些非常不同的语法。为什么您希望它运行时不会出错?postgres
如果
是plpgsql,请使用
CASE WHEN代替sql