$resultate = mysqli_query($link, "INSERT INTO `post` (`IDPost`, `ContentText`, `DatePost`, `TextPost`, `AutorPost`) VALUES ('$IDColl', '$DescrColl', $CurDate, '$MainTextColl', '$AutorColl'"); if ($resultate == false) { printf("ErrorMessage: %s\n", mysqli_error($link)); } mysqli_error возвращает: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1. Как я понимаю в mysqli_error место ошибки показывается между одинарными кавычками, а в моей ошибке между ними пустота. Верчу этими кавычками уже час, наверное
Если дата не числового типа, то ее значение тоже нужно заключать в кавычки. Плюс значения могут «бить» текст запроса. Например, 'ADMIN' (кавычки относятся к значению) будет бить текст запроса. Нужно экранировать или использовать подготовленный запрос. --- Добавлено --- Вообще хранить подобные значения в AutorPost – это не дело. Нормализуйте.
$CurDate = 'CURRENT_DATE()'; Это до запроса определено. Также пробовал писать просто CURRENT_DATE(), ошибка та же. Разбил по строкам свой запрос, выяснилось, он ругается на последний элемент. Где-то после Автора.. Значение по умолчанию стоит Код (Text): if (empty($AutorColl)) { $AutorColl = 'ADMIN'; } А что за экранизация и что за "бить" я не понял
Так нормально. Бить значит портить. Экранирование делает значения такими, которые бы не портили текст запроса (при этом их суть остается прежней). У MySQLi для этого есть спец. функция: mysqli_real_escape_string (mysqli_escape_string). --- Добавлено --- Так нормально. Но в запросе на скриншоте вы пытались изобразить немного другое
Ошибка та же Код (Text): <?php function InsertColl($IDColl,$DescrColl,$AutorColl,$MainTextColl) { require_once 'config.php'; if (empty($IDColl)) { $IDColl = 'NULL'; } else { $IDColl = "'$IDColl'"; } if (empty($AutorColl)) { $AutorColl = "ADMIN"; } $CurDate = 'CURRENT_DATE()'; /* Экранирование */ $CurDate = $link->real_escape_string($CurDate); $DescrColl = $link->real_escape_string($DescrColl); $MainTextColl = $link->real_escape_string($MainTextColl); print $IDColl; print $DescrColl; print $MainTextColl; print $AutorColl; echo '<br>'; /* Запрос */ $resultate = mysqli_query($link, "INSERTINTO `post` (`IDPost`, `ContentText`, `DatePost`, `TextPost`, `AutorPost`) VALUES ($IDColl, '$DescrColl', $CurDate, '$MainTextColl', '$AutorColl'"); if ($resultate == false) { printf("Error: %s\n", mysqli_error($link)); } } InsertColl($_POST['IDText'],$_POST['DescrText'],$_POST['AutorText'],$_POST['MainText']); ?> Вроде бы правильно списал с phpmanual Жалуется на пустоту '' Экранирование тоже и так и сяк пробовал и всё равно ошибка. Только иногда сам на себя ругается, так как ставит лишние знаки
Первое и самое главное! Сохраняйте сам текст запроса в отдельную переменную ( это вообще надо утвердить на законодательном уровне), что бы всегда можно было распечатать готовый запрос в браузер с подставленными значениями переменных и посмотреть глазами, что же вы пытаетесь спросить у БД. Этот же готовый запрос можно скопипастить из браузера и выполнить в пхпмайадмине.
Думаю, пропущена скобка. Д.б.: PHP: ...VALUES ('$IDColl', '$DescrColl', $CurDate, '$MainTextColl', '$AutorColl')")
Я СТОЛЬКО ЧАСОВ ПЯЛИЛСЯ В ЭТО И НЕ СМОГ УВИДЕТЬ Спасибо за то что потратил время на прочтение кода Надо будет всё таки как нибудь да и впихнуть отладчик или что то вроде в visual code..