Zend数据库,使用Typecast错误加入查询(我认为)

时间:2012-10-09 17:32:02

标签: php zend-framework postgresql zend-db

我想知道是否有一些方法可以将一个准备好的语句放入Zend Database类中,然后使用它而不是->select()->from()->where()。我刚刚在->query()尝试了以下查询但是没有。我只问因为我发现的所有参考资料,即使在zend docs中也只对mysqli说话。我发现数据库类对于更复杂的查询非常烦人(即使那时真的不那么复杂)。

我有这个查询

SELECT 
org.orgid, 
org.roleid, 
users.userid, 
users.email, 
users.firstname, 
users.lastname, 
users.contact, 
users.state, 
users.ts, 
users.alternate_delivery_email, 
users.unbound, 
users.blocked 
FROM my_mapping AS org 
INNER JOIN my_users AS users ON org.userid = users.userid
WHERE (org.orgid = 'generated-id')
AND (org.roleid::text LIKE 'partner-%');

我一直在努力使其符合匹配的zend DB版本

$select = $db->select()
        ->from(array('org' => 'my_mapping'),
            array(
                'orgid' => 'org.orgid',
                'roleid' =>'org.roleid',
                'userid' =>'users.userid',
                'email' =>'users.email',
                'firstname' =>'users.firstname',
                'lastname' =>'users.lastname',
                'contact' =>'users.contact',
                'state' =>'users.state',
                'ts' =>'users.ts',
                'alternate_delivery_email' =>'users.alternate_delivery_email',
                'unbound' =>'users.unbound',
                'blocked' =>'users.blocked'
            ))
        ->join(array('my_users' => 'users'),'org.userid = users.userid',array())
        ->where('org.orgid = ?',$mspID)
        ->where('org.roleid::text LIKE ?', 'partner-%');  

除了问题,这给了我什么。无论我尝试将其改为工作方式。然而,进入终端并使用直接查询工作正常,我得到结果和其他一切。因此,我开始查看是否可以找到一种方法来使用传递给Zend DB类的精确查询,因此我可以使用输出,就像我实际使用Zend DB类的查询一样。但是我在那个庄园找到的所有引用都是特定于mysql或mysqli的,所以我不确定它是否会起作用,如果它将如何将它串在一起呢?

另外值得一提的是“org.roleid”是一个“enum”,因此::text,同时roleid和userid是“uuid”。

我得到的错误是:

Warning: PDO::quote() expects parameter 1 to be string, object given in ........ on line ...
SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at end of input LINE 1: SELECT "my_users".* FROM "my_users" WHERE ( ^

1 个答案:

答案 0 :(得分:0)

您需要使用Zend_Db_Statement在Zend Framework中执行预准备语句 - http://framework.zend.com/manual/1.12/en/zend.db.statement.html

此外,这是另一个讨论相同的stackoverflow线程 - How to use prepared statements in Zend Framework