Что не так с моим синтаксисом PDO? Можно ли получить более четкое сообщение об ошибке? - PullRequest
0 голосов
/ 16 февраля 2012

Я просто пытаюсь сделать простую вставку:

$dbh = new PDO("mysql:host=" . WEBSITE_SERVER . "; dbname=fluenz_website", WEBSITE_LOGIN,   WEBSITE_PW);
$query = $dbh->prepare("INSERT INTO crm_orders (crm_id, order_num, channel) VALUES (:crm_id, :order_num, :channel)");

if($query->execute(array(':crm_id'=>$crm_id, ':order_num'=>$order_num, ':channel'=>$channel))){
    echo 'PDO SUCCESS';
}else{
    echo 'PDO FAILURE';
}

Но это не удается. Может кто-нибудь сказать мне, почему? И еще лучше, возможно ли получить более полезное возвращаемое значение из метода execute(), чем просто true или false?

Ответы [ 3 ]

2 голосов
/ 16 февраля 2012

Но это не удается. Может кто-нибудь сказать мне, почему?

Трудно сказать. Должны ли эти значения быть указаны? Ошибка, выданная MySQL, будет полезна для диагностики проблемы. Что приводит меня к ...

И еще лучше, возможно ли получить более полезное возвращаемое значение из метода execute (), чем просто true или false?

Пока PDO настроен на выдачу исключений при ошибках ...

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

... оберните его в блок try / catch и проверьте выброшенное исключение.

try {    
    $query->execute(...);
} catch (PDOException $e) {
    echo $e->getMessage();
}
1 голос
/ 16 февраля 2012

По умолчанию режим ошибок PDO - ERRMODE_SILENT, поэтому он не будет жаловаться, если что-то пойдет не так.Чтобы увидеть реальные ошибки, установите значение ERRMODE_WARNING или ERRMODE_EXCEPTION для выдачи исключений.http://php.net/manual/en/pdo.error-handling.php

try {
    $dbh = new PDO($dsn, $user, $password);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

try {
  $query = $dbh->prepare("INSERT INTO crm_orders (crm_id, order_num, channel) VALUES (:crm_id, :order_num, :channel)");
  $query->execute(array(':crm_id'=>$crm_id, ':order_num'=>$order_num, ':channel'=>$channel))
}
catch (PDOException $e) {
  echo "Query failed: " $e->getMessage();
}
0 голосов
/ 16 февраля 2012

С чем-то вроде этого вы сможете получить ошибку.

$dbh = new PDO("mysql:host=" . WEBSITE_SERVER . "; dbname=fluenz_website", WEBSITE_LOGIN,   WEBSITE_PW);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$query = $dbh->prepare("INSERT INTO crm_orders (crm_id, order_num, channel) VALUES (:crm_id, :order_num, :channel)");

    try {
        if($query->execute(array(':crm_id'=>$crm_id, ':order_num'=>$order_num, ':channel'=>$channel))){
        echo 'PDO SUCCESS';
        }else{
            echo 'PDO FAILURE';
        }
    } 
    catch (PDOException $e) {
        echo 'Connection failed: ' . $e->getMessage();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...