Отладка SQL в большом приложении PHP - PullRequest
2 голосов
/ 04 мая 2009

Я использую CodeCharge Studio для завершения большого PHP-приложения. Этот вопрос на самом деле не связан с CCS, но немного более общий. У меня есть веб-форма, которая должна обеспечивать возможности CRUD с определенной таблицей SQL Server, но вставки продолжают давать сбой без каких-либо ошибок. Что было бы лучшим способом отладить это?

Ответы [ 7 ]

7 голосов
/ 04 мая 2009

Когда у меня возникают проблемы с динамически генерируемыми запросами SQL, я обычно выводю запрос и пытаюсь запустить этот запрос на консоли для БД. Или же вы могли бы написать простую функцию PHP, которая записывает строки в файл, и таким образом вам не нужно отображать запрос непосредственно на вашей странице, а вместо этого в файле журнала.

5 голосов
/ 04 мая 2009

Посмотрите, что на самом деле представляет собой запрос, а затем попробуйте выполнить этот запрос непосредственно в БД. Тогда вы знаете, является ли это проблемой PHP или проблемой БД.

Тогда идите оттуда, в зависимости от результата.

3 голосов
/ 04 мая 2009

Если запрос выглядит нормально, дважды проверьте, имеет ли пользователь, выполняющий запрос, вставка прав на базу данных.

Я был пойман этим раньше.

2 голосов
/ 04 мая 2009

Вы можете отслеживать все sql-запросы в mysql, как показано на этом сайте . После включения ведения журнала запустите запрос вручную и посмотрите, почему он завершился неудачей.

1 голос
/ 15 мая 2009

В дополнение к тому, что упоминалось ранее, я могу добавить свое недавнее открытие:

trigger_error (print_r ($ your_var, 1), E_USER_ERROR);

Таким образом, вы можете выводить и отлаживать переменную, даже если это сложный скрипт с перенаправлениями, где простое эхо не поможет.

Дмитрий.

0 голосов
/ 07 октября 2013

Большинство классов соединений с базой данных в CodeCharge имеют флаг 'debug', который автоматически записывает все команды базы данных страницы в верхней части страницы.

Например, в моем старом проекте PHP 'Common Files' файл 'db_mysql.php' (строка 27):

public $Debug         = 0;     ## Set to 1 for debugging messages.

Измените на '1' и опубликуйте этот файл. Загрузите веб-страницу. Вернитесь назад и повторите публикацию, когда закончите.

Я использовал это в CCS для проектов PHP и ASP, и, скорее всего, на других языках (не уверен, что найти или найти в проектах .NET).

0 голосов
/ 15 мая 2009

Вы должны попробовать использовать FirePHP и записать все SQL-запросы в свою Firebug:

Примером будет:

<br>$sql = "SELECT * FROM table" <br>if (!mysql_query($sql)) { <br> // In un successfull log to FireBug <br> FB::error($data, "SQL error: ".mysql_error()); <br>}

Вы также можете реализовать вызов FB :: error из своей собственной функции, чтобы позже можно было отключить это поведение, изменив свою функцию:

<br>function log_error($data, $msg){ <br> //dont forget to deactivate in case the application goes live! <br> FB::error($data, $msg); <br>} <br>if (!mysql_query($sql)) { <br> // In un successfull log to FireBug <br> log_error($data, "SQL error: ".mysql_error()); <br>}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...