Php 如何在zend framework中打印精确的sql查询?
我有下面一段代码,是从模型中提取的Php 如何在zend framework中打印精确的sql查询?,php,mysql,zend-framework,zend-db,Php,Mysql,Zend Framework,Zend Db,我有下面一段代码,是从模型中提取的 ... $select = $this->_db->select() ->from($this->_name) ->where('shipping=?',$type) ->where('customer_id=?',$userid);
...
$select = $this->_db->select()
->from($this->_name)
->where('shipping=?',$type)
->where('customer_id=?',$userid);
echo $select; exit; // which gives exact mysql query.
.....
当我在zend like中使用更新查询时
$up_value = array('billing'=> '0');
$this->update($up_value,'customer_id ='.$userid.' and address_id <> '.$data['address_Id']);
$up_value=array('billing'=>'0');
$this->update($up_值,'customer_id=.$userid.'和address_id'.$data['address_id']);
这里我想知道确切的mysql查询。有没有可能在zend中打印mysql查询?请建议使用以下方法:-
echo $select->query();
或
您可以使用
Zend_Debug::Dump($select->assemble())
以获取SQL查询
或者,您可以启用它,它将以一种整洁的格式在Firebug中生成所有查询(甚至更新语句)
编辑:
在FF6.0+中也可以使用FireHP进行评测(不仅仅是链接中建议的FF3.0)选择对象在Zend Framework中有一个_toString()方法 从Zend框架手册:
$select = $db->select()
->from('products');
$sql = $select->__toString();
echo "$sql\n";
// The output is the string:
// SELECT * FROM "products"
另一种解决方案是使用Zend_Db_分析器。
i、 e
$db->getProfiler()->setEnabled(true);
//你的代码
$this->update($up_值,'customer_id=.$userid.'和address_id'.$data['address_id']);
Zend_Debug::dump($db->getProfiler()->getLastQueryProfile()->getQuery());
Zend_Debug::dump($db->getProfiler()->getLastQueryProfile()->getQueryParams());
$db->getProfiler()->setEnabled(false);
请查看。这允许您在准备和执行任何SQL语句时记录它。它适用于UPDATE语句和SELECT查询。我浏览了数百页,在谷歌上搜索了很多,但我没有找到任何确切的解决方案。 这终于对我起作用了。无论您在控制器或模型中的哪个位置。这个代码在任何地方都适用于我。就用这个
//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;
这东西终于对我起作用了。你可以打印
print_r($select->assemble());
从>=2.1.4
echo $select->getSqlString()
例如:
$select = $this->sql->select();
...
$select->from(array( 'u' => 'users' ));
$select->join(...
$select->group('u.id');
...
$statement = $this->sql->getSqlStringForSqlObject($select);
echo $statement;
现在请看Zend2:
$select->getSqlString();
我是这样做的
$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();
甚至更短:
echo $select->__toString()."\n";
和更多更短:
echo $select .""; die;
这个来自(即更新):
(额外)我在自己的模型文件中使用此文件:
echo $this->tableGateway->getSql()->getSqlstringForSqlObject($select);
祝您愉快:)如果您正在使用占位符,则从探查器或查询对象返回的查询将具有占位符 要查看mysql运行的确切查询,可以使用常规查询日志 这将列出自启用以来已运行的所有查询。 采集样本后,别忘了禁用此功能。 在活动服务器上;此日志可以很快填满。 从mysql终端或查询工具(如mysql Workbench)运行:
SET GLOBAL log_output = 'table';
SET GLOBAL general_log = 1;
然后运行查询。
结果存储在“mysql.general_log”表中
要禁用查询日志,请执行以下操作:
SET GLOBAL general_log = 0;
要验证它是否已关闭,请执行以下操作:
SHOW VARIABLES LIKE 'general%';
这帮助我找到了一个占位符没有被zend db替换的查询。使用探查器无法看到这一点。谢谢vascowhite。但是我需要知道更新mysql查询格式,而不是选择查询格式。如何打印此“$this->update…”我认为SQL不会存储在任何地方,它是生成和执行的。谢谢,但只有第二种方法
Zend_Debug::dump($select->query()
WorkedTanks,我需要在zend framwork中打印更新查询。如何像选择对象那样执行。我们是否有方法在zend调用未定义的方法zend\Db\sql\select::\uu toString()中打印更新方法的sql查询
关于Zend DB 2.8.2
你是怎么知道这一点的?这不是一个好的解决方案。它以错误的格式引用了你的所有值。@RajeshPatel如果你用`die($select);
替换“Mysql”,它应该成为有效的Mysql;甚至更多。好的,它会自动触发\uu toString()
,但我更喜欢var\u dump($select);死;
中庸!
echo $update->getSqlString();
echo $this->tableGateway->getSql()->getSqlstringForSqlObject($select);
SET GLOBAL log_output = 'table';
SET GLOBAL general_log = 1;
SELECT * FROM mysql.general_log
SET GLOBAL general_log = 0;
SHOW VARIABLES LIKE 'general%';