Недействительный запрос PDO не возвращает ошибку

Второй оператор SQL ниже возвращает ошибку в phpMyAdmin:

SET @num=2000040;
INSERT INTO artikel( artikel_nr, lieferant_nr, bezeichnung_1, bezeichnung_1 )
SELECT @num := @num +1 AS anum, 70338, f2, f3
FROM import
WHERE id >1

MySQL сообщает:

#1110 - Column 'bezeichnung_1' specified twice

Все верно. Но когда я запускаю запросы в Symfony 1.4 с помощью этой функции:

// run sql query
// http://erisds.co.uk/symfony/snippet-creating-debugging-complex-sql-queries-in-symfony
// http://stackoverflow.com/questions/5434702/php-quick-refactoring
// param $sql:    the query to run
// param $silent: bool if errors should be ignored
// throws:        pdo error info if statement failed and $silent=false
// returns:       pdo-statement (use for looping over result rows and error messages)
public static function runQuery($sql, $silent=false)
{
  $conn = Propel::getConnection();
  $pdo_statement = $conn->prepare($sql);

  $error = null;
  try
  {
    $pdo_statement->execute();
  }
  catch (Exception $e)
  {
    $error = $e->getMessage();
  }

  if ( !$error )
  {
    $pdo_error = $pdo_statement->errorInfo();
    $error = $pdo_error[2];
  }
  if ( !$silent && $error ) throw new Exception($error);

  return $pdo_statement;
}

, ошибки не возникает. Два оператора SQL должны быть отправлены одновременно, поскольку они зависят друг от друга. Ошибочный запрос строится на основе пользовательского ввода. Мне нужно вернуть эту ошибку, иначе я не могу сказать, была ли изменена база данных, и не могу сообщить об этом пользователю.

Знаете ли вы, почему PDO не жалуется на недопустимый оператор, и если это невозможно сделать, как получить информацию об успехе / неудаче?

Кстати, запрос обновляет базу данных, если нет повторяющихся столбцов.

Вот ссылка на класс PDOStatement: http://www.php.net/manual/en/class.pdostatement. php

10
задан Aaron Miller 11 January 2017 в 17:36
поделиться