Написал большой скрипт обновления таблицы, там уева туча запросов и обычно когда скрипт вываливается в консоль с ошибкой записи в базу — строку скрипта почему то не пишет, а приводится только часть запроса.
Чаще всего по этой части можно понять где косяк, но сейчас у меня вылезло
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));
Dram
Написал большой скрипт обновления таблицы, там уева туча запросов и обычно когда скрипт вываливается в консоль с ошибкой записи в базу — строку скрипта почему то не пишет, а приводится только часть запроса.
Чаще всего по этой части можно понять где косяк, но сейчас у меня вылезло
Duplicate entry ‘3017’ for key ‘PRIMARY’
Ошибку я понимаю, но как найти именно тот запрос ибо индекс праймери у меня в каждой таблице?
edogs software
Если у Вас скрипт вываливается в консоль, то значит есть функция прекращения работы.
В чем проблема в ней же выводить текст последнего запроса?
Dram
edogs, нет такой функции — весь скрипт это говнокод из запросов в базу, нескольких циклов да куча ИФ/ЕЛСЕ
Sitealert
Надо искать INSERT. И по таблицам посмотреть, возможно, там как раз 3к строк в какой-то таблице.
Dram
Sitealert, проще пути нет? В скрипте 20 инсертов в разные таблицы и в каждой более 3000 строк.
———- Добавлено 29.04.2020 в 20:09 ———-
ошибку нашел методом тыка, но сам факт странный — при ошибках в местах запросов в базу не указывается строка. Кто придумал сей бред?
edogs software
Sitealert, проще пути нет? В скрипте 20 инсертов в разные таблицы и в каждой более 3000 строк.
———- Добавлено 29.04.2020 в 20:09 ———-
ошибку нашел методом тыка, но сам факт странный — при ошибках в местах запросов в базу не указывается строка. Кто придумал сей бред?
Если запросы не напрямую mysqli_query, а через прослойку, то либо в прослойке есть настройки логов, либо в эту прослойку их туда несложно добавить (сразу после выполнения запроса — если ошибка в запросе — вывести полный запрос).
Если напрямую, то опять же решается заменой на прослойку, просто тупо реплейсом вызовов mysqli_query на кастюмную функцию, которая сделает запрос и перед возвратом не забудет проверить на ошибки при выполнении.
LEOnidUKG
Это у тебя какой-то бред.
mysqli_error отлично показывает ВЕСЬ запрос в котором есть ошибка.
Dram
LEOnidUKG, правильно я понимаю, чтобы все работало каждый запрос нужно продублировать функцией mysqli_error на случай сбоя, чтобы все показывало?
И сразу второй вопрос, а она не устаревшая функция, у меня пхп 7,4
LEOnidUKG
LEOnidUKG, правильно я понимаю, чтобы все работало каждый запрос нужно продублировать функцией mysqli_error на случай сбоя, чтобы все показывало?
И сразу второй вопрос, а она не устаревшая функция, у меня пхп 7,4
Нет, не устаревшая. Не путай с mysql и mysqli
Можешь свою функцию написать:
function checksql ($sql,$link)
{
return mysqli_query($link,$sql) or die (mysqli_error($link));
}
а заменить все вызовы на эту.