问题:
我已经阅读了很多关于PDO的文章和两本书,但我似乎没有找到我的问题的答案。问题是是否有一种方法可以将数据库连接作为require_once()包含在PDO中,并且仍然可以使用没有try / catch块的预处理语句?
我目前有一个名为settings.php的文件,其中包含以下代码。
代码(settings.php):
.cpp
我将此文件放在文档根目录之外,并将其与require_once()一起包含在实际的数据库连接文件中。
代码(db.php):
<?php
// Declaration of database connection information
$settings = [
'host' => '127.0.0.1',
'name' => 'c9',
'port' => '3306',
'charset' => 'utf8',
'username' => 'admin',
'password' => 'root'
];
?>
问题:
由于我有文件<?php
// Includes database connection information
require_once('../settings.php');
// Connects to a MySQL database
try {
$dbh = new PDO(
sprintf(
'mysql:host=%s;dbname=%s;port=%s;charset=%s',
$settings['host'],
$settings['name'],
$settings['port'],
$settings['charset']
),
$settings['username'],
$settings['password']
);
// Prevents PDO to use emulated prepares and activates error
// mode PDO::ERRMODE_EXCEPTION
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
// Catches errors raised by PDO
catch (PDOException $e) {
// Prints out errors to text file
file_put_contents('errors.txt', $e->getMessage(), FILE_APPEND);
// Shows generic error message to user
header('Location: 404.php');
exit;
}
?>
,是否可以将其包含在准备语句的其他文件中?虽然连接在一个中,但预备语句也可以在try / catch块中吗?感谢有关如何将SELECT / INSERT / UPDATE / DELETE包含在上述代码中的任何注释。
答案 0 :(得分:2)
您的问题似乎很不清楚,包含高度无关的部分。比如,预准备语句和try-catch块之间没有联系,两者都与include无关。并且没有关于在代码中包含SELECT / INSERT / UPDATE / DELETE查询的特定指南 - 您只需在任何地方运行它们。
我只能做一些笔记,希望能清除你的一些困惑。
首先,阅读my article on PDO。它仍然不完整,但它可以帮助你解决问题。
现在回答你的问题。
是否有办法将数据库连接作为require_once()包含在PDO中,并且仍然可以在没有try / catch块的情况下使用预处理语句?
是。 在大多数情况下,根本不需要try catch块。但是,每次真正需要它时,都可以使用try catch块而没有问题。
是否可以将其包含在准备好的语句的其他文件中?
是。这就是运营商的目的。
尽管连接在一个?
,预备语句也可以在try / catch块中
是。您可以根据需要在代码中包含尽可能多的此类块。但是,在大多数情况下,根本不需要它们。
如何将SELECT / INSERT / UPDATE / DELETE包含在上述代码中。
在那里包含这些查询毫无意义。只需在包含db.php的行之后写下它们
答案 1 :(得分:2)
你那里有很多不必要的代码。
1)try / catch是多余的,因为默认情况下PHP会将您的错误记录到错误日志中。此外,任何有用的东西都来自execute()
电话。
2)是的,你当然可以在任何你想要的地方包含你的数据库凭据,但请记住,require_once()是昂贵的,所以要计算。您可以考虑在所有其他页面上包含整个代码块,而不是仅包含凭据,然后重写其他代码。
3)上述代码中的select语句示例如下:
$stmt = $dbh->prepare("SELECT * FROM `table` WHERE `id` = :id");
$stmt->execute(array(":id"=>$id));
$results = $stmt->fetch(PDO::FETCH_ASSOC);