Как найти строку с ошибкой запроса в базу


Dram
234

Написал большой скрипт обновления таблицы, там уева туча запросов и обычно когда скрипт вываливается в консоль с ошибкой записи в базу – строку скрипта почему то не пишет, а приводится только часть запроса.

Чаще всего по этой части можно понять где косяк, но сейчас у меня вылезло


Duplicate entry ‘3017’ for key ‘PRIMARY’

Ошибку я понимаю, но как найти именно тот запрос ибо индекс праймери у меня в каждой таблице?


edogs software

Если у Вас скрипт вываливается в консоль, то значит есть функция прекращения работы.

В чем проблема в ней же выводить текст последнего запроса?


Dram

edogs, нет такой функции – весь скрипт это говнокод из запросов в базу, нескольких циклов да куча ИФ/ЕЛСЕ


Sitealert

Надо искать INSERT. И по таблицам посмотреть, возможно, там как раз 3к строк в какой-то таблице.


Dram

Sitealert, проще пути нет? В скрипте 20 инсертов в разные таблицы и в каждой более 3000 строк.

———- Добавлено 29.04.2020 в 20:09 ———-

ошибку нашел методом тыка, но сам факт странный – при ошибках в местах запросов в базу не указывается строка. Кто придумал сей бред?


edogs software

Dram:
Sitealert, проще пути нет? В скрипте 20 инсертов в разные таблицы и в каждой более 3000 строк.

———- Добавлено 29.04.2020 в 20:09 ———-

ошибку нашел методом тыка, но сам факт странный – при ошибках в местах запросов в базу не указывается строка. Кто придумал сей бред?

Если запросы не напрямую mysqli_query, а через прослойку, то либо в прослойке есть настройки логов, либо в эту прослойку их туда несложно добавить (сразу после выполнения запроса – если ошибка в запросе – вывести полный запрос).

Если напрямую, то опять же решается заменой на прослойку, просто тупо реплейсом вызовов mysqli_query на кастюмную функцию, которая сделает запрос и перед возвратом не забудет проверить на ошибки при выполнении.


LEOnidUKG

Кто придумал сей бред?

Это у тебя какой-то бред.

mysqli_error отлично показывает ВЕСЬ запрос в котором есть ошибка.


Dram

LEOnidUKG, правильно я понимаю, чтобы все работало каждый запрос нужно продублировать функцией mysqli_error на случай сбоя, чтобы все показывало?

И сразу второй вопрос, а она не устаревшая функция, у меня пхп 7,4


LEOnidUKG

Dram:
LEOnidUKG, правильно я понимаю, чтобы все работало каждый запрос нужно продублировать функцией mysqli_error на случай сбоя, чтобы все показывало?

И сразу второй вопрос, а она не устаревшая функция, у меня пхп 7,4

Нет, не устаревшая. Не путай с mysql и mysqli

Можешь свою функцию написать:

function checksql ($sql,$link)

{

return mysqli_query($link,$sql) or die (mysqli_error($link));

}

а заменить все вызовы на эту.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *