【问题标题】:PDO not giving a error response in try/catch [duplicate]PDO 在 try/catch 中没有给出错误响应 [重复]
【发布时间】:2019-10-30 06:23:35
【问题描述】:

我有一些 PDO 代码,即使该行没有成功插入数据库,它也不会出错...

try {
    $options = [
        \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
        \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
        \PDO::ATTR_EMULATE_PREPARES => false,
    ];
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);

    // prepare sql and bind parameters
    $stmt = $conn->prepare("INSERT INTO reservations (bookingdatetime, remoteip) 
                                  VALUES (:bookingdatetime, :remoteip)");

    $stmt->bindParam(':bookingdatetime', $bookingdatetime);
    $stmt->bindParam(':remoteip', $remoteip);

    // insert a row
    $stmt->execute();

    $bookingid = $conn->lastInsertId();

    echo json_encode(array("title" => "WE DID IT!", "body" => " The row # " . $bookingid . " was made!"))

} catch(PDOException $e) {
    echo json_encode(array("title" => "Database Error", "body" => $e->getMessage()));
}
$conn = null;

编辑:我应该说,即使没有成功创建该行,它仍然会给出“我们做到了!”消息,并且row id返回为0

编辑 2:如果我在我的准备语句列名称上添加一个类型,它仍然会返回“我们做到了”...这将是一个明显的错误。

【问题讨论】:

  • 可能不是PDOException,试试改成Exception
  • @ϻᴇᴛᴀʟ 编辑:我应该说,即使没有成功创建该行,它仍然会给出“我们做到了!”消息,并且行 id 返回为 0
  • echo $stmt; 的值是多少?

标签: php mysql pdo


【解决方案1】:

有一个函数rowCount 说明了先前查询插入/更新的行数

$stmt->execute();
$rowCount = $stmt->rowCount();

$bookingid = $conn->lastInsertId();

if($rowCount > 0)
    echo json_encode(array("title" => "WE DID IT!", "body" => " The row # " . $bookingid . " was made!"));
else 
    echo json_encode(array("title" => "Database Error", "body" =>"Insert Failed"));

【讨论】:

    猜你喜欢
    • 2021-01-12
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    相关资源
    最近更新 更多