php - 如何将 Propel Criteria 编译为 SQL

标签 php sql criteria propel

如何编译 Propel Criteria 来清除 SQL? 我试过 $criteria->toString();但这不是我所期望的。 我也试过 ModelPeer::doSelectStmt($criteria) 但它返回原始 sql(需要参数替换)

最佳答案

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

这是最完整的方法(来自 Propel),可以查看 SQL 的外观(带有占位符)以及将在其中替换的参数:

$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 配置(或支持)使用本地数据库准备语句,那么您可能仍然会在数据库中看到占位符。

关于php - 如何将 Propel Criteria 编译为 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1399772/

相关文章:

php - Laravel:Eloquent 和多列索引

java - 在 JPA Criteria API 中使用 ParameterExpression 与变量

php - Symfony2 Crawler - 将 UTF-8 与 XPATH 结合使用

javascript autoclick 在 php (wordpress) 中不起作用

php - 更改时选择提交表单但忽略结果 - jquery/php

sql - 计算有多少列具有特定值

sql - 当中间列可以是任何内容时,是否使用 3 列 SQL 索引?

java - 正则表达式字符串仅保留具有某些不同标准的行java

java - hibernate ,获取重复值

php - 来 self 客户的数据库安全