什么';我的PDO语法有问题吗?有可能得到更清楚的错误报告吗


What's wrong with my PDO syntax? Is it possible to get a clearer error report?

我只是想做一个简单的插入:

$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更有帮助的返回值?

但它正在失败。有人能告诉我为什么吗?

很难说。是否应该引用这些值?MySQL抛出的错误将有助于诊断问题。这让我想到…

更好的是,是否可以从execute()方法中获得比简单的true或false更有帮助的返回值?

只要PDO被设置为对错误抛出异常。。。

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

将其封装在try/catch块中,并检查抛出的异常。

try {    
    $query->execute(...);
} catch (PDOException $e) {
    echo $e->getMessage();
}

默认情况下,PDO的错误模式为ERRMODE_SILENT,因此如果出现任何问题,它不会抱怨。要查看实际错误,请将其设置为ERRMODE_WARNINGERRMODE_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();
}

有了这样的东西,您将能够得到错误。

$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();
    }