我正在使用 PHP5.5 的 PDO 库使用以下代码连接到 Firebird 1.5 数据库
public function getProductByKod($kod)
{
$exec = $this->getPdo()->prepare(
"SELECT KOD, NEV, CICSOP, AR0, AR1 FROM CIKK WHERE KOD = :KOD"
);
$exec->bindParam(':KOD', trim($kod), \PDO::PARAM_STR, 15);
$exec->execute();
return $exec->fetch();
}
the$kod
是一个字符串,而 firebird 列KOD
是一个VARCHAR(15)
如果我在变量中写入任何类型的字符串$kod
,它会给我这个错误:
PDOException: SQLSTATE[HY000]: General error: -303 Dynamic SQL Error SQL error code = -303 conversion error from string
当变量为空或整数时,它可以工作。
我不知道它为什么这样做。
编辑:
EDIT2:我在 Windows 服务器上安装了 FBscanner 并观察了什么样的 SQl 被发送到服务器,我发现 SQL 是不同的!
SELECT AZON, CEG, ELONEV, VEZNEV, KERNEV, BEOSZT, HIVTEL, HIVTEL2, FAX, EMAIL, MOBIL, CEGIRSZ, CEGVAROS, CEGUTCA" FROM CEGTEL WHERE AZON = 'teszt'
这完全是一个不同的 SQL!这来自这个函数:
public function getPartnerConnectionsbyAzon($id)
{
$exec = $this->getPdo()->prepare(
"SELECT AZON, CEG, ELONEV, VEZNEV, KERNEV, BEOSZT, HIVTEL,"
. "HIVTEL2, FAX, EMAIL, MOBIL, CEGIRSZ, CEGVAROS, CEGUTCA"
. " FROM CEGTEL WHERE AZON = :AZON"
);
$exec->bindParam(':AZON', $id, \PDO::PARAM_INT);
$exec->execute();
$return = $exec->fetch();
$exec->closeCursor();
return $return;
}
我读到有些驱动程序需要关闭参数,这就是为什么我把它放在closeCursor
那里但它仍然不起作用!