1

我想做的事:使用函数通过 PDO 连接到我的数据库,这样我就不必每次都输入连接。

我尝试了什么:

库.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);
}

测试.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;
}

那没有用,它没有给我任何错误,但根本没有输出任何东西。

什么有效:

测试.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 连接,这样我每次想要连接时都不必手动输入它?

4

2 回答 2

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

于 2013-11-08T02:51:47.980 回答
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()

这主要是从我在这台笔记本电脑上碰巧拥有的对象内部剪切和粘贴的,但你知道它的去向。

于 2013-11-08T02:51:11.493 回答