Php PDO连接尝试捕获包括

Php PDO连接尝试捕获包括,php,include,pdo,connection,Php,Include,Pdo,Connection,我是PDO的新手,我想从一开始就做这件事——我将在一个网站上替换我的旧mysql_uu函数 我说得对吗 我应该将连接代码放在try/catch中,并将其保存到文件中,并将其包含在页面顶部。然后将查询也放在try/catch中 或: 我是否应该将连接代码放在一个文件中,并将其包含在查询上方try/catch语句的顶部 第1版: 第2版: 或者我应该把try/catch放在两个地方吗?你应该同时做这两件事,甚至更多: 设置一个向用户显示消息并停止PHP的错误处理程序(请参阅) 启动连接时,添加tr

我是PDO的新手,我想从一开始就做这件事——我将在一个网站上替换我的旧mysql_uu函数

我说得对吗

我应该将连接代码放在try/catch中,并将其保存到文件中,并将其包含在页面顶部。然后将查询也放在try/catch中

或:

我是否应该将连接代码放在一个文件中,并将其包含在查询上方try/catch语句的顶部

第1版:

第2版:


或者我应该把try/catch放在两个地方吗?

你应该同时做这两件事,甚至更多:

  • 设置一个向用户显示消息并停止PHP的错误处理程序(请参阅)
  • 启动连接时,添加try/catch,如果捕获到异常,则抛出错误。我想,没有数据库连接,你的网站就无法运行
  • 尝试/捕捉查询,以便从错误中优雅地恢复(如果可以的话)

你应该同时做这两件事,甚至更多:

  • 设置一个向用户显示消息并停止PHP的错误处理程序(请参阅)
  • 启动连接时,添加try/catch,如果捕获到异常,则抛出错误。我想,没有数据库连接,你的网站就无法运行
  • 尝试/捕捉查询,以便从错误中优雅地恢复(如果可以的话)

可以,但在连接上使用try/catch是否安全(即,-错误不会显示用户名和密码)?查询错误引发的异常不可能显示连接信息?我从未见过显示密码的任何错误,有时在调试模式下显示密码。最好的办法是测试(在生产过程中使用
错误报告(0)
)Ok。。那么,连接的最佳方式是什么?假设您有一个包含多个方法的类,每个方法都有一个sql查询。是否最好在页面顶部包含$username和$password,然后在每个try/catch中,从$conn=new PDO开始(“mysql:host=$host;dbname=$dbname”,$username,$password)$conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_异常);因此,您可以在每个方法中启动连接并将其设置为null。您只需在页面顶部(例如,在您的includes中)启动一次连接,然后重新使用此连接。不要为每个查询启动新连接!是的,但是在具有“独立”方法的“Util”类中:checkUsername()、checkEmail()等。如果在Util类的同一个实例上调用了这些方法中的多个,并且在页面顶部有一次连接,-您不能在方法的末尾将连接设置为null,这将使同一实例上的第二个方法调用没有连接…好的,但是在连接上使用try/catch是否安全(意思是,-errors不会显示用户名和密码)?查询错误引发的异常不可能显示连接信息?我从未见过显示密码的任何错误,有时在调试模式下显示密码。最好的办法是测试(在生产过程中使用
错误报告(0)
)Ok。。那么,连接的最佳方式是什么?假设您有一个包含多个方法的类,每个方法都有一个sql查询。是否最好在页面顶部包含$username和$password,然后在每个try/catch中,从$conn=new PDO开始(“mysql:host=$host;dbname=$dbname”,$username,$password)$conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_异常);因此,您可以在每个方法中启动连接并将其设置为null。您只需在页面顶部(例如,在您的includes中)启动一次连接,然后重新使用此连接。不要为每个查询启动新连接!是的,但是在具有“独立”方法的“Util”类中:checkUsername()、checkEmail()等。如果在Util类的同一个实例上调用了这些方法中的多个,并且在页面顶部有一次连接,-您不能在方法的末尾将连接设置为null,这将使同一实例上的第二个方法调用没有连接。。。
include('pdo.php'); // try/catch in file

try { 

    $stmt = $conn->prepare('SELECT * FROM myTable WHERE id = :id');
    $stmt->execute(array('id' => $id));

    while($row = $stmt->fetch()) {
        print_r($row);
    }
} catch(PDOException $e) {
    echo 'ERROR: ' . $e->getMessage();
}
try {
    include('pdo.php'); // no try/catch in file

    $stmt = $conn->prepare('SELECT * FROM myTable WHERE id = :id');
    $stmt->execute(array('id' => $id));

    while($row = $stmt->fetch()) {
        print_r($row);
    }
} catch(PDOException $e) {
    echo 'ERROR: ' . $e->getMessage();
}