スキップするパラメータとして :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
私が試したもの:
- BindValue の代わりに BindParam を使用して、参照によってパラメーターをバインドします。
- PDO_STR を使用して :start を文字列としてバインドしようとします。失敗。
- :start の値を SQL クエリ自体にハード コーディングします。これは機能します。
- 使用
$sql->bindValue(':start', (int) 1, PDO:PARAM_INT);
— ダメ。 - 最初にPHP変数に代入して4番を試しても同じ結果です。
助言がありますか?PDOコネクタを使用してInformix 11でPHP 5.3.(最近のもの)を使用しています。繰り返しますが、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.