Как скомпилировать, Продвигают Критерии к SQL

Символ ESC в сценариях пакетной обработки ^. Но для дважды заключенных в кавычки строк, дважды кавычки:

"string with an embedded "" character"
6
задан Garbit 14 March 2012 в 02:17
поделиться

4 ответа

I believe this is the way

$rawSql = BasePeer::createSelectSql( $criteria, $params );
2
ответ дан 8 December 2019 в 17:24
поделиться

Прежде всего, важно отметить, что 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 настроен (или поддерживает) для использования операторов, подготовленных для собственной базы данных, вы все равно можете видеть заполнители в базе данных.

12
ответ дан 8 December 2019 в 17:24
поделиться

Недавно у нас была такая же проблема. См. http://groups.google.com/group/propel-development/browse_thread/thread/f56a5a8ee5db3b60

Теперь BasePeer :: populateStmtValues ​​() является общедоступным, начиная с версии 1.4 и выше. В настоящее время это находится в разработке.

0
ответ дан 8 December 2019 в 17:24
поделиться

Я решил поработать. На самом деле мне нужен был INSERT INTO ... SELECT . Т.е. создать оператор SELECT с помощью критериев, далее добавьте INSERT INTO и выполните.
Поэтому я попросил BasePeer создать необработанный sql ( BasePeer :: createSelectSql ), а затем добавил INSERT INTO вперед. Поскольку мне нужно заполнить значения оператора (: p1,: p2 и т. Д.), Но метод BasePeer :: populateStmtValues ​​ является частным (почему?), Мне пришлось скопировать этот метод в другой поместите и назовите его.

0
ответ дан 8 December 2019 в 17:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: