как получить SQL сгенерированный Pear MDB2 без его выполнения? - PullRequest
1 голос
/ 08 июня 2011

Я работаю с Pear MDB2 с PHP 5.3.Я кодирую проект, который обновляет БД, и прежде чем я позволю ему начать изменять данные, я бы хотел посмотреть, как выглядят SQL-запросы, сгенерированные autoPrepare () и execute (), прежде чем они действительно будут выполняться.

Я планирую создать и выполнить запрос на обновление, подобный следующему:

    $stmt = $db->extended->autoPrepare($tableName, $tableColumns,
    MDB2_AUTOQUERY_UPDATE, 'id = ' . $db->quote(12345, 'integer'),
    $tableColumnTypes));

    $res =& $stmt->execute($tableColumnValues);

Я уже знаю, что могу видеть SQL, сгенерированный autoPrepare(), с заполнителями для значений путем доступа к $stmt->query.Я хотел бы видеть завершенный SQL, сгенерированный execute(), со значениями, замененными местозаполнителями, без фактической отправки запроса в БД .

Как можноЯ так делаю?

Ответы [ 2 ]

5 голосов
/ 08 июня 2011

Подготовленные операторы компилируются на стороне сервера, поэтому вы не можете видеть их до их выполнения. Например, в MySQL, если вы хотите выполнить подготовленный оператор, MDB2 на самом деле делает:

PREPARE stmt FROM 'SELECT * FROM foo WHERE bar = ?';
SET @baz = 'baz';
EXECUTE stmt USING @baz;

Сервер никогда не «возвращает» фактический запрос, который он выполнил. Если вы хотите увидеть, какой запрос был выполнен, вам нужно настроить журнал запросов.

Например, в MySQL (my.cnf):

[mysqld]
general_log_file = /var/log/mysql_queries.log
general_log = 1

В журнале запросов будет показан следующий пример запроса:

Query     PREPARE stmt FROM 'SELECT * FROM foo WHERE bar = ?';
Query     SET @baz = 'baz';
Query     EXECUTE stmt USING @baz;
Execute   SELECT * FROM foo WHERE bar = 'baz';
0 голосов
/ 24 июля 2013
print_r ($db->last_query, true);
...