我使用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();
}
$kod
是一个字符串,火鸟列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
放在那里但它仍然不起作用!