Использование PDO с INSERT (PHP) - PullRequest
1 голос
/ 03 июля 2011

У меня есть

$sql = $db->prepare("INSERT INTO `aliases` (`alias`, `domain`, `added`, `enabled`) VALUES (:alias, :domain, :added, :enabled)");
$sql->bindValue(':alias', $alias);
$sql->bindValue(':domain', $domain);
$sql->bindValue(':added', time());
$sql->bindValue(':enabled', 1);
$sql->execute();
//how do I test if it was added or #1062 - Duplicate entry '...' for key 'alias'

Полагаю, это правильно.

Мой вопрос: Как проверить, успешно ли он был добавлен?

Ответы [ 3 ]

6 голосов
/ 03 июля 2011

Вы можете проверить возвращаемое значение $sql->execute(), например:

if ($sql->execute()) {
    // Query succeeded.
} else {
    // Query failed.
    $errorcode = $sql->errorCode();
}

Для получения дополнительной информации см. документацию для PDOStatement (класс подготовленных операторов).

2 голосов
/ 03 июля 2011

См. Документы о PDO Обработка ошибок и этот комментарий

По умолчанию вы должны проверить возврат выполнения.Подробности можно найти в errorinfo () и errorcode ()

if ($sql->execute === false) {    //check return, false on error
     var_dump($sql->errorinfo();  //array containing information on error
     die()
}

Но я бы рекомендовал использовать PDO :: ERRMODE_EXCEPTION, чтобы PDOException выбрасывается при ошибке.Это делает ваш код немного аккуратнее.Основная информация предоставляется в исключении __ toString () , но дополнительную информацию можно найти (используя обычные методы исключения, см. Ссылку на документацию выше).

$db = new PDO( /* your connection string */ );
$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
try {
    $sql = $db->prepare("INSERT INTO `aliases` (`alias`, `domain`, `added`, `enabled`) VALUES (:alias, :domain, :added, :enabled)");
    $sql->execute();
}

catch(PDOException $e) {
    echo $e;             //basic information is provided due to Exception::__toString()
    die();
}
1 голос
/ 07 июня 2012
if ($stmt->errorCode() == "00000")  {
  // Query succeeded.   
} else {
  // Query failed.
  echo "Error: " . $stmt->errorCode();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...