我想做什么:使用函数通过PDO连接到我的数据库,所以我不必每次都输入连接。
我尝试了什么:
library.php:
function dbconpdo() {
$db = new PDO('mysql:host=localhost;dbname=dbname', 'username', 'password');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}
test.php的:
include_once "templates/library.php";
try {
dbconpdo();
$stmt = $db->query('SELECT * FROM users');
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo $row['user'];
echo $row['password'];
echo "test";
}
} catch(PDOException $ex) {
echo $ex;
}
这没用,它没有给我任何错误,但根本没有输出任何东西。
什么有效:
test.php的:
try {
$db = new PDO('mysql:host=localhost;dbname=dbname', 'username', 'password');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$stmt = $db->query('SELECT * FROM users');
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo $row['user'];
echo $row['password'];
echo "test";
}
} catch(PDOException $ex) {
echo $ex;
}
它有效,但问题是我必须完全删除该功能并手动输入(连接)。
我的问题: 如何使用函数(或类似的东西)与我的数据库建立PDO连接,以便每次我想连接时都不必手动输入?
答案 0 :(得分:1)
如果您不想使用对象,只想要一个可以在任何地方调用的简单函数,它在第一次调用时实例化PDO
对象,并缓存/返回该对象以进行后续调用执行以下操作:
<?php
function dbConnection()
{
static $db;
if (!$db instanceof PDO) {
$db = new PDO('mysql:localhost;dbname=dbname', 'username', 'password');
}
return $db;
}
它是全局范围内的函数,因此您可以在任何地方调用它,并将返回值分配给局部变量,如下所示:
$db = dbConnect();
$db->prepare('SELECT name FROM user where id = :id');
// etc
它不是很优雅,但它对小脚本很方便。希望这会有所帮助:)
修改强>
此上下文中有关static关键字的一小部分信息: http://www.php.net/manual/en/language.variables.scope.php#language.variables.scope.static
答案 1 :(得分:0)
我喜欢使用对象,所以通常会根据需要创建一个这样的实例:
class mySQL
{
public $con;
private $userName = "userName";
private $passWord = "password";
private $hostName = "mysql:host=localhost;dbname=yourDBName";
private $isDebug=false;
function __construct()
{
$this->con = new PDO ($this->hostName, $this->userName , $this->passWord);
$this->con->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}
function __destruct()
{
$this->con = null;
}
}
$con=new mySQL();
$sql="select * from someTable";
$con->con->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$con->execute()
这主要是从我在这台笔记本电脑上碰巧拥有的物体内部进行剪切和粘贴,但是你可以了解它的发展方向。