使用函数或文件进行数据库连接

时间:2014-06-03 23:19:02

标签: php function pdo

我很难理解为什么我不能做两件事:

  • 在函数中包装PDO数据库连接
  • 将PDO数据库连接存储在单独的文件中并在加载时需要

所以我有一个文件: db_connect.php

try {
    $db = new PDO('mysql:host=xxx;dbname=xxx;charset=utf8', 'xxx', 'xxx');
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e)
{
    echo $e->getMessage();
}

我知道这确实连接到了我的数据库。麻烦就在于我

require_once('db_connect.php');
//or
include('db_connect.php');

进入我的 functions.php ,它似乎无法加载连接。如果我将内容从db_connect.php移动到我的函数中,该函数有一些SQL命令:

function doStuff(){
//Copy and paste db_connect.php
$var= $db->prepare('SELECT .........
}

有效。这是什么问题?我认为这是因为$ db不是在" try / catch"之外建立的。但全球宣布它

$db;

没有帮助。我还将db_connect.php的内容移到了 functions.php

中的自己的函数db_connect()
function doStuff(){
db_connect();
$var= $db->prepare('SELECT ...
}

没有运气!我真的无法理解这不会起作用..

2 个答案:

答案 0 :(得分:0)

你是对的, $ db 本地变量。你有两个选择:

  • db_connect()返回 $ db 变量并使用

  • $ db 存储到超全局 $ GLOBALS [“db”]

答案 1 :(得分:0)

使用MVC工作流程:

在我的模型中,我有一个db_connect文件:

try{
    $this->db = new PDO($hostname,$username,$password);
}

catch (Exception $e) { 
  echo 'ERROR: unable to connect to remote DB. Try again or contact     Web Master - dbcp'; exit;
}

也在我的模型文件中

<?php
class FunStuff
{
private $db

public function __construct()
{
    include 'config_DB.php';
}

private function isValidAdminLogin($userName, $password)
{
    // boolean return
    $password = sha1($password);
    $query = 'SELECT adminID FROM admin WHERE adminName = :username AND password = :password';
    $statement = $this->db->prepare($query);
    $statement->bindValue(':username', $userName);
    $statement->bindValue(':password', $password);
    $statement->execute();
    if($statement->rowCount() == 1){return true;}
    else {return false;}
}
}