Zend FrameworkでSQL文字列をクエリとして実行する方法はありますか?
私はそのような文字列を持っています:
$sql = "SELECT * FROM testTable WHERE myColumn = 5"
次に、この文字列を直接実行して解析し、「手動」でZend_Db_Table_Select
オブジェクトを作成します。または、可能であれば、この文字列からZend_Db_Table_Select
オブジェクトを作成して、そのオブジェクトを実行します。
どうやってやるの? Zendのドキュメントでこれに対する解決策が見つかりませんでした。
最初にZend_DBオブジェクトを作成している場合は、それを使用してクエリを作成できます。マニュアルのこのエントリを見てください: https://framework.zend.com/manual/1.12/en/zend.db.statement.html
$stmt = $db->query(
'SELECT * FROM bugs WHERE reported_by = ? AND bug_status = ?',
array('goofy', 'FIXED')
);
または
$sql = 'SELECT * FROM bugs WHERE reported_by = ? AND bug_status = ?';
$stmt = new Zend_Db_Statement_Mysqli($db, $sql);
TableGatewayを使用している場合は、このステートメントを使用して生のSQLクエリを実行できます。
$this->tableGateway->getAdapter()->driver->getConnection()->execute($sql);
$ sqlは生のクエリに関係します。これは、TRUNCATE/INSERT SELECTステートメントのようなネイティブのZF2対応がないクエリに役立ちます。
ZF1の例を次に示します。
$db =Zend_Db_Table_Abstract::getDefaultAdapter();
$sql = "select * from user"
$stmt = $db->query($sql);
$users = $stmt->fetchAll();
同じクエリをZend形式で使用できます。
$select = db->select()->from(array('t' => 'testTable'))
->$where= $this->getAdapter()->quoteInto('myColumn = ?', $s);
$stmt = $select->query();
$result = $stmt->fetchAll();