【发布时间】:2012-04-13 21:22:05
【问题描述】:
我有一个 db.php 文件,其中包含以下内容:
// db.php file
// creates connection to database
// DATABASE CONNECTION FUNCTION
function sql_con(){
try{
$dbh = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME, DB_USER, DB_PASS,
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
// log error to file and display friendly error to user
ExceptionErrorHandler($e);
exit;
}
}
我有一个注册页面,我想检查用户名是否已经存在,所以我事先调用我的sql_con(); 函数连接到数据库,然后执行以下查询
// connect to database
sql_con();
$stmt = $dbh->prepare("SELECT `user_login` FROM `users` WHERE `user_login` = ? LIMIT 1");
$stmt->execute(array($username));
if ( $stmt->rowCount() > 0 ) {
$error[] = 'Username already taken';
}
我对 PDO 很陌生,上面我收到以下错误:
注意:未定义变量:第 64 行 C:\wamp\www\signup.php 中的 dbh
致命错误:在非对象上调用成员函数 prepare() C:\wamp\www\signup.php 第 64 行
可能是一些非常愚蠢的事情,我似乎将自己与 PDO 混淆了,因为我处于初学者阶段。谁能告诉我我做错了什么?另外我不确定这是否是正确的方法,因为我是 PDO 的新手,所以如果有更有效的方法来进行用户名查询检查,请告诉我。
【问题讨论】:
-
@Paul,是的,我使用 require_once 包含它。我有一个配置文件,在该 config.php 文件中,我使用 require_once 来包含我的 db.php、constants.php 和 functions.php 文件,并且该配置文件被加载到我的所有网站网页中。谢谢phplover
-
这是Scope的一个很基础的概念,和PDO无关。如果你不熟悉这个概念,我建议你重读一下手册,也许会买一本好书。