当我添加 :start 作为要跳过的参数时,出现以下错误。我知道如果我对 SKIP/NEXT 值进行硬编码并且 :customerID 保持不变,SQL 查询就可以工作。如果我删除 :start 子句并将其保留为SKIP 1 FIRST 5 ... WHERE t1.customer_num = :customerID ...
正常工作。我找不到错误发生的原因。
错误
exception 'PDOException' with message 'SQLSTATE[HY004]: Invalid SQL data type: -11064 [Informix][Informix ODBC Driver]SQL data type out of range
我试过的东西:
- 使用 BindParam 而不是 BindValue 通过引用来绑定参数。
- 使用 PDO_STR 尝试将 :start 绑定为字符串。没有成功。
- SQL 查询本身中 :start 的硬编码值。这行得通。
- 使用
$sql->bindValue(':start', (int) 1, PDO:PARAM_INT);
——不行。 - 通过首先分配给 PHP 变量来尝试数字 4,结果相同。
有什么建议么?我正在使用 PHP 5.3。(最近的东西)和 Informix 11 使用 PDO 连接器。同样,它仅适用于 customerID,但不适用于 :start 并返回上述错误。
$sql = null;
$sql= $conn->prepare('SELECT SKIP :start FIRST 5 TRIM(loc_esi_id) FROM customer t1,customer_ts_data t2 WHERE t1.customer_num = :customerID AND t1.customer_num = t2.customer_num');
//Bind values to parameters(by value)
$sql->bindValue(':start', $start ,PDO::PARAM_INT);
$sql->bindValue(':customerID', $customerID, PDO::PARAM_INT);
//$sql->bindParam(':count',$count,PDO::PARAM_INT);
$results = null;
try{
$sql->execute();
$results = $sql->fetchAll();
} catch (PDOException $e) {
//Error Handling, etc.