zend 프레임 워크에서 정확한 SQL 쿼리를 인쇄하는 방법은 무엇입니까?
모델에서 가져온 다음 코드가 있습니다.
...
$select = $this->_db->select()
->from($this->_name)
->where('shipping=?',$type)
->where('customer_id=?',$userid);
echo $select; exit; // which gives exact mysql query.
.....
zend에서 업데이트 쿼리를 사용할 때,
$up_value = array('billing'=> '0');
$this->update($up_value,'customer_id ='.$userid.' and address_id <> '.$data['address_Id']);
여기에서 정확한 mysql 쿼리를 알고 싶습니다. zend에서 mysql 쿼리를 인쇄하는 가능한 방법이 있습니까? 사려 깊은 조언
Zend Framework의 Select 객체에는 __toString () 메서드가 있습니다.
Zend Framework 매뉴얼에서 :
$select = $db->select()
->from('products');
$sql = $select->__toString();
echo "$sql\n";
// The output is the string:
// SELECT * FROM "products"
다른 해결책은 Zend_Db_Profiler를 사용하는 것입니다. 즉
$db->getProfiler()->setEnabled(true);
// your code
$this->update($up_value,'customer_id ='.$userid.' and address_id <> '.$data['address_Id']);
Zend_Debug::dump($db->getProfiler()->getLastQueryProfile()->getQuery());
Zend_Debug::dump($db->getProfiler()->getLastQueryProfile()->getQueryParams());
$db->getProfiler()->setEnabled(false);
http://framework.zend.com/manual/en/zend.db.select.html
> = 2.1.4에서
echo $select->getSqlString()
나는 수백 페이지를 가로 지르고 많이 봤지만 정확한 해결책을 찾지 못했습니다. 마침내 이것은 나를 위해 일했습니다. 컨트롤러 또는 모델의 위치에 관계없이. 이 코드는 어디서나 나를 위해 일했습니다. 그냥 사용하세요
//Before executing your query
$db = Zend_Db_Table_Abstract::getDefaultAdapter();
$db->getProfiler()->setEnabled(true);
$profiler = $db->getProfiler();
// Execute your any of database query here like select, update, insert
//The code below must be after query execution
$query = $profiler->getLastQueryProfile();
$params = $query->getQueryParams();
$querystr = $query->getQuery();
foreach ($params as $par) {
$querystr = preg_replace('/\\?/', "'" . $par . "'", $querystr, 1);
}
echo $querystr;
마침내 이것은 나를 위해 일했습니다.
Zend_Debug::Dump($select->assemble());
SQL 쿼리를 가져 오는 데 사용할 수 있습니다 .
또는 Zend DB FirePHP 프로파일 러 를 활성화 하여 Firebug에서 깔끔한 형식으로 모든 쿼리를 얻을 수 있습니다 (UPDATE 문 포함).
편집 : FirePHP를 사용한 프로파일 링은 FF6.0 +에서도 작동합니다 (링크에서 제안 된 FF3.0뿐만 아니라)
이제 Zend2에서 :
$select->getSqlString();
인쇄 할 수 있습니다 ..
print_r($select->assemble());
$statement = $this->sql->getSqlStringForSqlObject( HERE GOES Zend\Db\Sql\SelectSQL object );
echo "SQL statement: $statement";
예:
$select = $this->sql->select();
...
$select->from(array( 'u' => 'users' ));
$select->join(...
$select->group('u.id');
...
$statement = $this->sql->getSqlStringForSqlObject($select);
echo $statement;
더 짧게 :
echo $select->__toString()."\n";
그리고 더 짧은 :
echo $select .""; die;
이것을 사용하십시오 :-
echo $select->query();
또는
Zend_Debug::dump($select->query();
Zend_Db_Profiler를 확인하십시오 . 이를 통해 준비 및 실행되는 모든 SQL 문을 기록 할 수 있습니다. UPDATE 문과 SELECT 쿼리에 대해 작동합니다.
나는 이것을 이렇게했다
$sql = new Sql($this->adapter);
$select = $sql->select();
$select->from('mock_paper');
$select->columns(array(
'is_section'
));
$select->where(array('exam_id = ?' => $exam_id,'level_id = ?' => $level_id))->limit(1);
$sqlstring = $sql->buildSqlString($select);
echo $sqlstring;
die();
프로파일 러 또는 쿼리 개체에서 반환 된 쿼리에는 자리 표시자가 있습니다 (사용하는 경우).
mysql이 실행하는 정확한 쿼리를 보려면 일반 쿼리 로그를 사용할 수 있습니다.
This will list all the queries which have run since it was enabled. Don't forget to disable this once you've collected your sample. On an active server; this log can fill up very fast.
From a mysql terminal or query tool like MySQL Workbench run:
SET GLOBAL log_output = 'table';
SET GLOBAL general_log = 1;
then run your query. The results are stored in the "mysql.general_log" table.
SELECT * FROM mysql.general_log
To disable the query log:
SET GLOBAL general_log = 0;
To verify it's turned off:
SHOW VARIABLES LIKE 'general%';
This helped me locate a query where the placeholder wasn't being replaced by zend db. Couldn't see that with the profiler.
$db->getProfiler()->setEnabled(true);
// your code
$this->update('table', $data, $where);
Zend_Debug::dump($db->getProfiler()->getLastQueryProfile()->getQuery());
Zend_Debug::dump($db->getProfiler()->getLastQueryProfile()->getQueryParams());
$db->getProfiler()->setEnabled(false);
This one's from Zend Framework documentation (ie. UPDATE):
echo $update->getSqlString();
(Bonus) I use this one in my own model files:
echo $this->tableGateway->getSql()->getSqlstringForSqlObject($select);
Have a nice day :)
참고URL : https://stackoverflow.com/questions/7723657/how-to-print-exact-sql-query-in-zend-framework
'Nice programing' 카테고리의 다른 글
Android 에뮬레이터에서 파일 시스템의 로컬 파일에 액세스하는 방법은 무엇입니까? (0) | 2020.11.03 |
---|---|
표현식에는 클래스 유형이 있어야합니다. (0) | 2020.11.03 |
DateTime에 PHP 타임 스탬프 (0) | 2020.11.03 |
다른 함수를 반환하는 함수를 어떻게 작성합니까? (0) | 2020.11.03 |
목록보기에서 긴 클릭 이벤트 후 메뉴 생성 (0) | 2020.11.03 |