致命错误:在第16行的非对象上调用成员函数prepare()

时间:2014-03-17 02:54:49

标签: php mysql pdo

我的网站上有一个注册系统,我正在将我的所有mysql语句更改为PDO语句。当我改变它时,我收到了这个错误: 致命错误:在第16行的非对象上调用成员函数prepare()

这是我的代码......

<?php

include("sql.php");
    require("includes/password.php");

session_start(); //Start session for writing

$errmsg = array(); //Array to store errors

    $noterr = array();

$errflag = false; //Error flag

function UniqueID() {
$UID = rand(); //Create unique ID
$check = $db->prepare('SELECT * FROM `users` WHERE `UID` = :UID'); //line 16

    $UIDarray = array(
        UID => $UID
);

    $check->execute($UIDarray);

... sql.php

<?php

ob_start();
session_start();

//database credentials
$dbhost = 'dbhost';
$dbuser = 'dbuser';
$dbpass = 'dbpass';
$dbname = 'dbname';

$db = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
?>

2 个答案:

答案 0 :(得分:1)

PHP中的范围不是全局的。您的$db->execute调用位于UniqueID函数内,并且该函数无法访问sql.php中定义的$db变量。如果您更改UniqueId函数以接受数据库参数,然后将该参数传递给该函数,则您将能够访问它。

答案 1 :(得分:1)

您的数据库连接 - $db - 超出范围。见http://www.php.net/manual/en/language.variables.scope.php

您需要将其添加为函数参数

function UniqueID($db) {
                  ^^^

当你调用函数

UniqueID($db)

或将包含放在你的功能

function UniqueID() {
    include("sql.php");

OR声明全局

function UniqueID() {
 global $db