alexvdv
@alexvdv
Изучаю PHP

Что я делаю не так при добавлении записи через PDO?

Всем привет. Хочу добавить запись в таблицу, но получаю ошибку:
SQLSTATE[42000]: Syntax error or access violation: 1064 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 'group, utm, ref, cost, date_inserted ) VALUES (NULL, 'vkontakte', 'ta' at line 10


Не пойму, что делаю не так. Вот код:

$data = array();

$data['referer_url'] = NULL;
$data['utm_source'] = NULL;
$data['utm_medium'] = NULL;
$data['utm_campaign'] = NULL;
$data['utm_term'] = NULL;
$data['utm_content'] = NULL;
$data['type'] = NULL;
$data['source'] = NULL;
$data['group'] = NULL;
$data['utm'] = NULL;
$data['ref'] = NULL;
$data['cost'] = NULL;
$data['data_inserted'] = NULL;

if(isset($_SERVER['HTTP_REFERER'])) {
      $data['referer_url'] = $_SERVER['HTTP_REFERER'];
   }

//$data['referer_url'] = $referer_url;
foreach ($parameters as $param) {
    if (isset($_SESSION[$param]) && !empty($_SESSION[$param])) {
 		$data[$param] = $_SESSION[$param];
	}
}
// Создание соединения и исключения
try {
  $db = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
   // Установить режим ошибки PDO в исключение
  $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  $db->exec("set names utf8");
   // Установка данных в таблицу
 
// Получаем текущую дату
$data['data_inserted'] = date("Y-m-d H:i:s");

// Запрос на импорт данных в базу данных

$stmt = $db->prepare("INSERT INTO utm_params (
  referer_url,
  utm_source,
  utm_medium,
  utm_campaign,
  utm_term,
  utm_content,
  type,
  source,
  group,
  utm,
  ref,
  cost,
  date_inserted
   ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");

$stmt->bindParam(1, $data['referer_url']);
$stmt->bindParam(2, $data['utm_source']);
$stmt->bindParam(3, $data['utm_medium']);
$stmt->bindParam(4, $data['utm_campaign']);
$stmt->bindParam(5, $data['utm_term']);
$stmt->bindParam(6, $data['utm_content']);
$stmt->bindParam(7, $data['type']);
$stmt->bindParam(8, $data['source']);
$stmt->bindParam(9, $data['group']);
$stmt->bindParam(10, $data['utm']);
$stmt->bindParam(11, $data['ref']);
$stmt->bindParam(12, $data['cost']);
$stmt->bindParam(13, $data['data_inserted']);

 $stmt->execute();
  echo "Успешно создана новая запись";
 }
  catch(PDOException $e) {
    echo $e->getMessage();
 }

// Закрыть подключение
$db = null;


Подскажите, что здесь не так??? И как еще сделать, чтобы в случае если подключение не удалось или какая-то ошибка, то на экран ничего не должно выводиться, так как это редирект, то есть программа дальше должна выполняться, как ни в чем не бывало
  • Вопрос задан
  • 133 просмотра
Решения вопроса 1
Оберните group в `` (можно и другие поля).
Group это служебное слово, плэтому выдается ошибка.

Что бы не выводить ничего при ошибке - уберите вывод из catch
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@FanatPHP
как еще сделать, чтобы в случае если подключение не удалось или какая-то ошибка, то на экран ничего не должно выводиться

Наверное, убрать код, который выводит?
Просто убери то что у тебя называется "исключения": try и catch
Ответ написан
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы
от 2 000 до 4 000 usd.
Teamlead Краснодар
До 100 000 руб.
HTML Academy Санкт-Петербург
от 130 000 до 140 000 руб.
18 авг. 2018, в 01:10
17000 руб./за проект
17 авг. 2018, в 23:00
5500 руб./за проект