Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Как сохранить ошибку MySQL в файл?

Как сохранить ошибку MySQL в файл?


     01.07.2020    Общие вопросы по PHP, MySQL    105

вопрос
Вызываю скрипт по расписанию, результаты выполнения пишу в лог
До того момента пока в переменную не придёт не допустимое для БД значение
Ловлю ошибку на экране The Error returned was:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 't Believe It's Not Summit'' at line 3

В PHP есть функция error_log, но как её применить с классом mysql ($db->query) ?

 if (!mysql_query($sql_query,$connection))
{
    error_log(mysql_error() . "\n", 3, "/var/tmp/my-errors.log");
}
echo "Success!";


    $db->query("
        INSERT IGNORE INTO dle_dotaapi_events SET 
            `tour_id` = '$match_results_arr[tour_id]',
            `tour_name` = '$match_results_arr[tour_name]'
        ;"); //закрылся insert

Ответа пока нет


10 комментариев

dj-avtosh
PHP-developer

dj-avtosh - 1 июля 2020 00:34 -

В зависимости от используемого адаптера:

В dle сейчас mysqli:

https://www.php.net/manual/ru/mysqli.error.php

А вообще ошибки складываются у мускуля в log, указанный в my.cnf

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

UsurpatorVaticana
Юзер

UsurpatorVaticana - 1 июля 2020 00:49 -

В функции mysql.php display_error перед выводом дописать, расходимся
file_put_contents(ENGINE_DIR . '/data/dotaapi/logs/mysql_global.txt', date("Y-m-d H:i:s") . " |  MySQL error in file: {$trace[$level]['file']} at line {$trace[$level]['line']}" . "\n" . "Error Number: {$error_num}" . "\n" . "The Error returned was: {$error}" . "\n" . "SQL query: {$query}" . "\n\n\n", FILE_APPEND);

TeraMoune
Эксперт

TeraMoune - 1 июля 2020 00:49 -

У меня встречный вопрос, а что Вы будите делать с ошибками ?
Мне кажется Вы не экранируете кавычки в данных и ошибки будут регулярны, до тех пор пока данные не будут пропущены через $db->safesql

UsurpatorVaticana
Юзер

UsurpatorVaticana - 1 июля 2020 00:51 -

TeraMoune, согласен с вами, но это тот случай когда их вообще не должно быть, по воле случая попалась, и чтоб не mysql лог про неё не узнать

TeraMoune
Эксперт

TeraMoune - 1 июля 2020 00:57 -

Их не может быть только если они удаляются заранее перед тем как будут добавлены в базу данных. Но очень сомневаюсь, что $match_results_arr[tour_name] подвергается каким либо изменениям.

UsurpatorVaticana
Юзер

UsurpatorVaticana - 1 июля 2020 01:01 -

TeraMoune, всего не предусмотришь, вы практикуете safesql для всех инсертов?

dj-avtosh
PHP-developer

dj-avtosh - 1 июля 2020 01:12 -

надеюсь практикует pdo и ерундой не занимается)

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

dj-avtosh
PHP-developer

dj-avtosh - 1 июля 2020 01:15 -

safesql + приведение типов + проверку входных данных нужно практиковать по умолчанию.

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

TeraMoune
Эксперт

TeraMoune - 1 июля 2020 01:40 -

UsurpatorVaticana, Ну да использую везде (В dle это так же используется повсеместно), для всех текстовых данных где есть шанс, что в данных могут быть какие-то символы которые вызовут ошибку.

	function safesql( $source ) {
		if(!$this->db_id) $this->connect(DBUSER, DBPASS, DBNAME, DBHOST);

		if ($this->db_id) return mysqli_real_escape_string ($this->db_id, $source);
		else return addslashes($source);
	}


mysql_real_escape_string — Экранирует специальные символы в строках для использования в выражениях SQL.

addslashes — Экранирует спецсимволы в строке.

UsurpatorVaticana
Юзер

UsurpatorVaticana - 1 июля 2020 01:50 -

TeraMoune,благодарю, уже сам понял что за зверь safesql
`tour_name` = ' . $db->safesql($match_results_arr[tour_name]) . '

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

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

наверх