php - PDOException 没有被捕获
问题描述
我正在使用 pdo 使用 mysql 进行简单的登录。一切正常,所以现在我专注于错误处理。但是有一个问题。在我的错误中dbconfig
我自愿保存了错误psw/email/dbname
以创建错误。
<?php
session_start();
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'Captive');
define('DB_PASSWORD', 'arancione');
define('DB_DATABASE', 'geochimie');
function get_db() {
$dbhost=DB_SERVER;
$dbuser=DB_USERNAME;
$dbpass=DB_PASSWORD;
$dbname=DB_DATABASE;
try {
$dbConnection = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);
$dbConnection->exec("set names utf8");
$dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $dbConnection;
}
catch (PDOException $e) {
header("../pages/errore.php?errore=dbconfig");
}
}
?>
但是,无法捕获任何错误,因此当我使用返回的 db 连接准备语句时,get_db()
我得到以下信息:
未捕获的错误:在 null 上调用成员函数 prepare()
这是我准备 stmt 的 php 脚本:
<?php
class Admin {
public function userLogin( $email,$password)
{
try{
$db = get_db();
$stmt = $db->prepare('SELECT id FROM admin WHERE email=:email AND psw=:hash_password');
$stmt->bindParam("email", $email,PDO::PARAM_STR) ;
$stmt->bindParam("hash_password", $password,PDO::PARAM_STR) ;
$stmt->execute();
$count=$stmt->rowCount();
$data=$stmt->fetch(PDO::FETCH_OBJ);
$db = null;
if($count)
{
$_SESSION['uid']=$data->id;
return true;
}
else
{
return false;
}
}
catch(PDOException $e) {
header("Location: ../pages/errore.php?errore=db");
}
}
}
?>
如您所见,还有另一个 try-catch,但它的工作方式不同。非常感谢您的关注!
解决方案
好的,看来我需要在 catch 块的标题之后添加 die() 或 exit() 。现在我可以正确处理错误了。
推荐阅读
- c# - 在运行时读取日志文件并在客户端逐行显示
- bash - Jupyter bash 不保存环境变量定义
- c# - IdentityServer4 多客户端注销
- python - 在while循环中打开文件的问题(python)
- nestjs - 如何使用 NestJs 中的拦截器修改来自 PUT 的请求和响应
- javascript - 使用 vue-router 在不同高度的 Vuejs 组件之间创建平滑过渡的问题
- javascript - 如何将变量从客户端传递到服务器端以设置 webchartcontol 宽度
- java - Spring Hibernate mysql:字段'id'没有默认值
- javascript - 如何将月份值从一个 Date 对象复制到另一个对象?
- php - 如何在两个或多个表中获取同一列?