Привет всем! Нужно через с помощью php добавлять в БД (MySQL) новые строки (работаю с MySQL 5.7 и PHP 7.1). Сделал функцию:
function add_task($link, array $post, array $files, int $user_id): bool {
$name = $post['project'];
$category_id = $post['name'];
$expires_at = !empty($post['date']) ? date_format(date_create($post['date']), 'Y-m-d') : NULL;
foreach($files as $file) {
$file_path = $file['name'] ? __DIR__ . '\\'. $file['name'] : NULL;
}
$sql_add_task = "INSERT INTO tasks(user_id, category_id, name, expires_at, file_path) VALUES($user_id, $category_id, $name, $expires_at, $file_path)";
$result = mysqli_query($link, $sql_add_task);
if(!$result) {
die("Ошибка MySQL: " . mysqli_error($link));
}
return $result;
}
А вот структура таблицы, куда нужно будет вставлять строки:
CREATE TABLE tasks (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
category_id INT,
name CHAR(128) NOT NULL,
created_at TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
done_at DATE NULL DEFAULT NULL,
status INT DEFAULT 0,
expires_at DATE NULL DEFAULT NULL,
file_path CHAR(128)
);
Проблема в строке с запросом INSERT. Он обёрнут в " ". В нём $category_id и $name обязательны, это строки. А $expires_at и $file_path - факультативны, если они есть - это строки, если нет - тогда NULL. Если в таком виде запустить функцию, то возникает ошибка:
Ошибка MySQL: 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 'народ с балкона золотыми монетами, 2019-02-28, W:\d' at line 2
var_dump выводит такую строку запроса:
string(251) "INSERT INTO tasks(user_id, category_id, name, expires_at, file_path) VALUES(1, 1, Осыпать народ с балкона золотыми монетами, 2019-02-28, W:\domains\216812-doingsdone\1024-31-snowpark.psd)"
Проблема в том, что переменные name, expires_at, file_path изначально типа string. А учитывая, что весь вопрос обёрнут тоже в " ", внутри кавычки вокруг значений, в которые превращаются переменные, я так понимаю, убираются. В итоге - ошибка.
Оборачивать переменные в ' ' - не выход, ибо вместо некоторых может быть NULL - опять ошибка. Подскажите, как быть в такой ситуации