将 php 函数与 PDO 一起使用


Using php functions with PDO

>我想做的:使用函数通过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 连接,这样我就不必在每次想要连接时手动键入它?

如果你不想使用对象,只是想要一个可以在任何地方调用的简单函数,它在第一次调用时实例化了一个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

它不是很优雅,但对于小脚本来说很方便。希望这对:)有所帮助

编辑:

在此上下文中有关静态关键字的少量信息:http://www.php.net/manual/en/language.variables.scope.php#language.variables.scope.static

我喜欢使用对象,所以通常创建一个实例以根据需要使用:

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()

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