我很难理解为什么我不能做两件事:
所以我有一个文件: 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 ...
}
没有运气!我真的无法理解这不会起作用..
答案 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;}
}
}