1

我正在使用 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 

当变量为空或整数时,它可以工作。

我不知道它为什么这样做。

编辑: DbVisualizer 中的 KOD 列

终端中的 KOD 列

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那里但它仍然不起作用!

4

0 回答 0