mrusklon
@mrusklon
Не получается? Яростно гугли!

Как сделать сообщение об ошибке при ошибке добавления данных в БД?

есть таблица с кучей столбцов. id | date | user_id| ......
date и user_id = уникальный ключ , чтоб в одну дату на одного человека больше нечего внести нельзя было

все бы хорошо но я добавляю данные в бд массивом вида
INSERT INTO user_dolg (date, user_id, dolg_id, dogovorNomer, object, vidraboty, hours) VALUES 
('2019-03-12', '14', '2', 'none', '12', '12'),
 ('2019-03-12', '11', '1', 'none', '12', '12'),
 ('2019-03-12', '13', '1', '9', '10', '12', '8')


сам код в php выглядит так:
<?php
$db_host = "localhost";
$db_user = "root"; // Логин БД
$db_password = ""; // Пароль БД
$db_base = 'energocrm'; // Имя БД
$db_table = "user_dolg"; // Имя Таблицы БД

// Подключение к базе данных
$mysqli = new mysqli($db_host, $db_user, $db_password, $db_base);

// Если есть ошибка соединения, выводим её и убиваем подключение
if ($mysqli->connect_error) {
    die('Ошибка : (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
}
$postTable = $_POST['postTable'];

/** Если нам передали ID то обновляем */
if ($postTable) {

    $query = "INSERT INTO user_dolg (date, user_id, dolg_id, dogovorNomer, object, vidraboty, hours) VALUES $postTable";
    $mysqli->query($query);
    $message = 'ajax: данные добавленны в табель';
} else {
    $message = 'ajax: Не удалось внести данные';
}

$out = array(
    'message' => $message
);

// Устанавливаем заголовок ответа в формате json
header('Content-Type: text/json; charset=utf-8');

// Кодируем данные в формат json и отправляем
echo json_encode($out);


выходит у нас в php проверка только есть ли $_POST['postTable'] и если есть , больше нечего мы не получим в ответ кроме "зер гуд все хорошо"

как сделать чтобы при ошибке/дубле в БД , это "предостережение" отправить человеку? В идеале конечно надо узнать у какого конкретно id возник дубль
  • Вопрос задан
  • 217 просмотров
Решения вопроса 1
Minifets
@Minifets
Hello world!!!
1) Хорошей практикой будет использовать prepare запрос.

2) Проверка на уникальность это явно задача валидатора. А его нужно использовать до выполнения запроса. В самом валидаторе же можно сделать SELECT запрос на проверку уникальности ID.

3) mysqli_stmt_execute, как и mysqli_query возвращают FALSE в случае, если запрос упал. Можно сделать проверку и вывести ошибку, но лучше будет написать блок валидации, который будет гарантировать успешность выполнения запросов.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
seganim
@seganim
PHP-программист, программный инженер
Prepare statement обязательно. mysqli->error возвращает текст последней ошибки. Отключаете автокоммит, для всего массива записей делаете mysqli->prepare и mysqli->execute, а потом смотрите есть ли ошибки путем проверки mysqli->error на пустоту.
Ответ написан
irishmann
@irishmann
Научись пользоваться дебаггером
Изучите исключения. php.net/manual/ru/language.exceptions.php

<?php
	try{
		/*Выполняем действие*/
		$a = $x * $y;
		/* выбрасываем исключение*/
		if ($a < 0){
			throw new Exception('А меньше нуля!');
		}
	}
	catch (Exception $e) {
		echo 'Ошибка: ' . $e->getMessage();
	}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы