我试图将Zend_Db_Table与PDO_OCI驱动程序一起使用但是当我尝试使用SELECT时,我得到了他的例外:
Message: SQLSTATE[HY000]: General error: 942 OCIStmtExecute: ORA-00942: table or view does not exist (/var/tmp/portage/dev-lang/php-7.1.4/work/sapis-build/apache2/ext/pdo_oci/oci_statement.c:159), query was: SELECT "all_tables"."table_name" FROM "all_tables"
这是我的代码:
class Application_Model_Tables extends Coret_Db_Table_Abstract
{
protected $_name = 'all_tables';
public function getAll()
{
$select = $this->_db->select()
->from($this->_name, 'table_name');
return $this->selectAll($select);
}
}
这是有效的代码:
$db = Zend_Db_Table_Abstract::getDefaultAdapter();
$sql = 'SELECT table_name FROM all_tables';
$stmt = $db->query($sql);
return $stmt->fetchAll();
很明显,表名中添加了双引号存在问题。这是一些PDO_OCI错误还是我做错了什么?
编辑:
我知道双引号有什么用,因为它在PostgreSQL中的工作原理相同,并且我使用PostgreSQL很长一段时间。问题是我不知道" all_tables"不是this问题中建议的真实姓名。该表的真实姓名是ALL_TABLES,列的真实姓名是TABLE_NAME。所以正确的答案是我有错误的表名和列名,这与建议的副本无关,因为它的答案根本无法帮助我。