【发布时间】:2018-07-02 15:12:51
【问题描述】:
我的网站向这个 PHP 脚本发送了一个XMLHttpRequest:
<?php
if(isset($_POST))
{
require ('../../PDOConnect.php');
try
{
$insert = $pdo->prepare("INSERT INTO priorities
employeeID, WorkOrderNumber
VALUES (?,?)");
$insert->bindValue(1,$_POST['employeeID'],PDO::PARAM_INT);
$insert->bindValue(2,$_POST['WorkOrderNumber'],PDO::PARAM_INT);
$insert->execute();
echo "try";
}
catch(Exception $e)
{
echo "catch";
echo $e;
}
}
?>
此时,priorities 表不存在。我希望XMLHttpRequest 的status 是500,因为查询显然总是会失败。 PDO 确实记录了错误,因为 PDOConnect 包含
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
但我得到的是200,而不是500。我是 PDO 的新手。当我使用 MySQLi 准备好的语句时,我会从失败的 PHP 脚本中得到一个 500,但 PDO 的行为不同。我希望客户知道查询失败,而不是得到200 并认为一切正常。无论有没有try 和catch,我都会得到相同的结果。我是否无法理解 PDO 的工作原理?我需要更改 PDO 设置吗?
编辑:我添加了echo "try"; 和echo "catch";。客户的responseText 总是“尝试”,从不“抓住”。 catch 语句似乎没有运行。这是为什么呢?
我的PDOConnect.php 文件包含:
<?php
$options =
[
PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING,
];
$pdo = new PDO('mysql:host=localhost;dbname=mydb;charset=utf8mb4','root','mypassword',$options);
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
?>
【问题讨论】:
-
200 是因为 AJAX 请求成功 - 它到达了您的 PHP 脚本。如果您希望 PHP 脚本通过 AJAX 返回 500 错误,您必须捕获它并用它做您想做的事情。您的 PHP 脚本也可以正常工作,它传递了 500,因为查询错误。