Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何将标准编译为SQL_Php_Sql_Criteria_Propel - Fatal编程技术网

Php 如何将标准编译为SQL

Php 如何将标准编译为SQL,php,sql,criteria,propel,Php,Sql,Criteria,Propel,如何编译标准以清除SQL? 我尝试了$criteria->toString();但这不是我所期望的。 我也尝试过ModelPeer::doSelectStmt($criteria),但它返回了原始sql(必需的参数替换)我相信这就是方法 $rawSql = BasePeer::createSelectSql( $criteria, $params ); 首先,需要注意的是,spreep将PDO与准备好的语句一起使用,因此在PHP中不会得到完全“内置”的SQL语句。使用Criteria->toS

如何编译标准以清除SQL? 我尝试了$criteria->toString();但这不是我所期望的。
我也尝试过ModelPeer::doSelectStmt($criteria),但它返回了原始sql(必需的参数替换)

我相信这就是方法

$rawSql = BasePeer::createSelectSql( $criteria, $params );

首先,需要注意的是,spreep将PDO与准备好的语句一起使用,因此在PHP中不会得到完全“内置”的SQL语句。使用Criteria->toString()是一个很好的开始,但是正如Peter提到的,很多工作实际上是由BasePeer::createSelectSql()方法完成的

以下是查看SQL(带有占位符)的最完整方式(来自Propel)以及将在中替换的参数:

$params = array(); // This will be filled with the parameters
$sql = BasePeer::createSelectSql($criteria, $params);

print "The raw SQL: " . $sql . "\n";
print "The parameters: " . print_r($params, true) . "\n";

请注意,仅在数据库级别记录查询可能会获得更好的效果。当然,如果PDO被配置(或支持)使用原生db prepared语句,那么您可能仍然会在db中看到占位符。

我决定解决这个问题。实际上我需要插入到。。。选择。即-通过条件创建SELECT语句,进一步将INSERT追加到并执行

所以我要求BasePeer创建原始sql(BasePeer::createSelectSql),然后将INSERT追加到ADWARD中。因为我需要填充语句的值(:p1,:p2等),但方法BasePeer::populateStmtValues是私有的(为什么?),所以我不得不将该方法复制粘贴到另一个地方并调用它。

我们最近遇到了同样的问题。看

现在BasePeer::populateStmtValues()从1.4版开始是公共的。这目前在开发中。

甚至更容易尝试:

print($criteria->toString()) ;

正如我前面所说的,我希望得到清晰的sql,而不是原始的(比如“从文章中选择,其中名称=:p1”),我想Propel提供了这样的功能…在$rawSql中,我必须替换参数:p1,:p2等等。但这样我必须编写已经编写好的代码,这就是params数组的用途。我想我没有说清楚-将参数作为关联数组提供。不,$params用于从BasePeer::CreateSelectSql返回参数。然后我想我误解了文档。上面写着“*@param数组和$params参数,这些参数将在prepared语句中被替换。你能告诉我你的criteria对象是什么样子吗?我添加了一个
wordwrap($sql)
,这样长的sql就可以放在页面上了。我将一些推进查询转换回PDO,这就像一种魅力。谢谢@Hans L。