1

我是 Zend Framework 2 的新手,我正在尝试将我的表连接到 TableGateway 并进行基本选择,如下所示:

SELECT * FROM <tableName> WHERE QMQT# = 1

在我的表模型中看起来像这样:

$rowset = $this->tableGateway->select(array('QMQT#' => $id));

问题似乎是查询中的 # 符号,因为我收到错误消息:

SQLSTATE[42S22]: Column not found: 0 [IBM][iSeries Access ODBC Driver][DB2 UDB]SQL0206 - Column "QMQT""#" not in specified tables. (SQLPrepare[0] at ext\pdo_odbc\odbc_driver.c:206)

我可以在普通的 PDO 中很好地准备和执行这个查询,但是通过 Zend 的 TableGateway 运行它会得到这个错误。Zend 中的表名中是否不允许使用井号/数字符号?有没有办法绕过这种过度转义?

谢谢你的任何建议...

编辑:

我也尝试了 quoteIdentifier() 函数来尝试解决这个问题:

$rowset = $this->tableGateway->select(array($this->tableGateway->getAdapter()->getPlatform()->quoteIdentifier('QMQT#') => $id));

但它所做的只是给我这个错误:

SQLSTATE[42000]: Syntax error or access violation: 0 [IBM][iSeries Access ODBC Driver][DB2 UDB]SQL0104 - Token QMQT was not valid. Valid tokens: < > = <> <= !< !> != >= �&lt; �&gt; �= IN NOT. (SQLPrepare[0] at ext\pdo_odbc\odbc_driver.c:206)
4

1 回答 1

1

您是否尝试过使用表达式?

$rowset = $this->tableGateway->select(array(
    new Zend\Db\Sql\Expression\Expression('QMQT# as bob')
));
于 2013-07-16T15:36:07.137 回答