0

事前にペアリングされたステートメントを Zend Database クラスに挿入し、 , , を使用する代わりにそれを使用する方法があるかどうか疑問に思って->select()->from()ます->where()。以下のクエリを試してみました->query()が、失敗しました。zend docsでさえ見つけたすべての参照がmysqliのみを対象としているため、私は尋ねるだけです。私は、DB クラスがより複雑なクエリで非常に煩わしいことを発見しました (それでも実際にはそれほど複雑ではありません)。

このクエリがあります

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」であるため、::textroleid と 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 ( ^
4

1 に答える 1

0

Zend Frameworkでプリペアドステートメントを実行するには、Zend_Db_Statementを使用する必要があります-http ://framework.zend.com/manual/1.12/en/zend.db.statement.html

また、これは同じことを議論している別のスタックオーバーフロースレッドです-ZendFrameworkでプリペアドステートメントを使用する方法

于 2012-10-10T06:10:35.490 に答える