Dea_Winchester
@Dea_Winchester
Программист

PHP 7.0 mysqli prepare как отобразить ошибку?

Здравствуйте, пытаюсь выполнить SQL запрос к БД, но prepare() возвращает почему-то false, не могу понять почему.
Подключение к бд есть.
global $config;
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$DB = new mysqli($config['DB_HOST'], $config['DB_USER'], $config['DB_PASS'], $config['DB_NAME']);

if (mysqli_connect_errno()) {
    printf("Не удалось подключиться: %s\n", mysqli_connect_error());
    exit();
}
class Table
{
	public static function Add($data)
	{
		global $DB;

		$query = 'INSERT INTO table (title) VALUES (?)';

		if (!($stmt = $DB->prepare($query))) { // ОШИБКА ЗДЕСЬ (возвращает false)
			echo 'Не удалось подготовить запрос: (' . $DB->errno . ') ' . $DB->error;
			// return false;
		}
		
		if (!$stmt->bind_param('s', $data['title'])) {
			echo 'Не удалось привязать параметры::Add';// (" . $stmt->errno . ") " . $stmt->error;
			return false;
		}
		if (!$stmt->execute()) {
			echo 'Не удалось выполнить запрос: (' . $stmt->errno . ') ' . $stmt->error;
			return false;
		}

		return $DB->insert_id;
	}
}
  • Вопрос задан
  • 161 просмотр
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Чтобы отобразить ошибку mysqli prepare, достаточно той строчки, которая написана второй сверху.
Это единственное, что нужно для отображения ошибок mysqli. Ну и разумеется нужно настроить отображение ошибок РНР в целом.

А вот бессмысленные пляски с бубном, которые только засоряют код и не несут никакой полезной информации, надо вычистить. И оставить только нормальный код
function AddTable($data)
{
    global $DB;
    $query = 'INSERT INTO table (title) VALUES (?)';
    $stmt = $DB->prepare($query);
    $stmt->bind_param('s', $data['title']);
    $stmt->execute();
    return $DB->insert_id;
}

после этого сразу выяснится, что ошибка возникает не здесь, а совсем в другом месте.
После этого нужно будет переписать в том месте точно так же, как здесь, чтобы выводилось нормальное сообщение об ошибке, содержащее, в числе прочего, имя файла и номер строки, на которой поизошла ошибка

В класс, кстати, эту отдельно стоящую функцию запихивать не нужно.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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