Я думаю, что Java мог бы быть хорошим выбором просто, потому что можно сделать графический интерфейсы пользователя легко и видеть, "что происходят прохладные вещи". По той же причине, возможно, любой из языков.NET. Я также услышал хорошие вещи о языках сценариев (Ruby и Python, особенно) для того, чтобы заставлять детей изучить, как программировать.
Думаю, я наконец-то отвечу на свой вопрос, чтобы получить полное решение для записи. Но я должен поблагодарить Бена Джеймса и Кайласа Баду, которые дали подсказки.
Краткий ответ
Как упоминал Бен Джеймс: НЕТ .
Полный запрос SQL не существует на стороне PHP, потому что запрос с токенами и параметры отправляются в базу данных отдельно.
Полный запрос существует только на стороне базы данных.
Даже попытка создать функцию для замены токенов на стороне PHP не гарантирует, что процесс замены будет таким же, как и в SQL (такие хитрые штуки, как тип токена, bindValue vs bindParam , ...)
Обходной путь
Здесь я подробно остановлюсь на ответе Кайласа Баду.
Регистрируя все SQL-запросы, мы можем увидеть, что действительно выполняется на сервере.
В mySQL это можно сделать, обновив my.cnf (или my.ini в моем случае с сервером Wamp) и добавив строку вроде:
log=[REPLACE_BY_PATH]/[REPLACE_BY_FILE_NAME]
Только не запускайте это в производственной среде !!!
Использование подготовленных операторов с параметризованными значениями - это не просто еще один способ динамического создания строки SQL . Вы создаете подготовленный оператор в базе данных, а затем отправляете только значения параметров.
Таким образом, то, что, вероятно, будет отправлено в базу данных, будет PREPARE ...
, затем SET ...
и, наконец, EXECUTE ...
.
Вы не сможете получить некоторую строку SQL, например SELECT * FROM ...
, даже если это приведет к аналогичным результатам, потому что такой запрос никогда не отправлялся в базу данных.
Вы также можете явно обновить ревизию, используя '-r', а затем текущий номер ревизии:
То, что я сделал, чтобы напечатать этот фактический запрос, немного сложно, но он работает :)
В методе, который присваивает переменные моему оператору, у меня есть еще одна переменная, которая выглядит примерно так:
$this->fullStmt = str_replace($column, '\'' . str_replace('\'', '\\\'', $param) . '\'', $this->fullStmt);
Где:
$ column
- мой токен
$ param
- фактическое значение, присвоенное токену
$ this-> fullStmt
- мой оператор только для печати с замененными токенами
Он просто заменяет токены значениями, когда происходит настоящее назначение PDO.
Надеюсь, я не запутал вас и, по крайней мере, указал вам правильное направление.
Я не верю, что вы можете, но надеюсь, что кто-то докажет, что я неправ.
Я знаю, что вы можете распечатать запрос, и его метод toString покажет вам sql без замен . Это может быть удобно, если вы создаете сложные строки запроса, но не дает полного запроса со значениями.
You might be able to use PDOStatement->debugDumpParams
. Смотрите документацию по PHP - .