Символ ESC в сценариях пакетной обработки ^
. Но для дважды заключенных в кавычки строк, дважды кавычки:
"string with an embedded "" character"
I believe this is the way
$rawSql = BasePeer::createSelectSql( $criteria, $params );
Прежде всего, важно отметить, что Propel использует PDO с подготовленными операторами, поэтому вы не получите полностью «встроенного» оператора SQL в PHP. Использование Criteria-> toString () - хорошее начало, но, как упоминает Питер, большая часть работы действительно выполняется методом 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 настроен (или поддерживает) для использования операторов, подготовленных для собственной базы данных, вы все равно можете видеть заполнители в базе данных.
Недавно у нас была такая же проблема. См. http://groups.google.com/group/propel-development/browse_thread/thread/f56a5a8ee5db3b60
Теперь BasePeer :: populateStmtValues () является общедоступным, начиная с версии 1.4 и выше. В настоящее время это находится в разработке.
Я решил поработать. На самом деле мне нужен был INSERT INTO ... SELECT . Т.е. создать оператор SELECT с помощью критериев, далее добавьте INSERT INTO и выполните.
Поэтому я попросил BasePeer создать необработанный sql ( BasePeer :: createSelectSql ), а затем добавил INSERT INTO вперед. Поскольку мне нужно заполнить значения оператора (: p1,: p2 и т. Д.), Но метод BasePeer :: populateStmtValues является частным (почему?), Мне пришлось скопировать этот метод в другой поместите и назовите его.