【问题标题】:Using php functions with PDO在 PDO 中使用 php 函数
【发布时间】:2013-11-08 02:40:47
【问题描述】:

我想做的事:使用函数通过 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);
}

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 连接,这样我就不必在每次连接时手动输入?

【问题讨论】:

标签: php function pdo mysqli


【解决方案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

【讨论】:

  • 我使用了我自己的函数(我试图修改你的函数以供我使用但没有成功),我自己的调用方法,但是添加了你的“return $db”和“$db = dbConnect( )",它就像一个魅力!
  • 太棒了!这不是很长一段时间内“最纯粹”的方法,但它工作得很好,特别是对于小脚本等。作为常规函数,它有点简单化的单例,这对于封装和可测试性不是很好,这对于大型应用程序至关重要。但是,您使用的 PDO 很好。你也应该看看 PDO 的prepared statements。编写查询的最佳/最安全方式!无论如何,很高兴帮助:)
【解决方案2】:

我是使用对象的粉丝,所以通常创建一个 this 的实例以根据需要使用:

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-07-19
  • 2023-03-16
  • 1970-01-01
  • 2015-04-05
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-28
相关资源
最近更新 更多