首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >致命错误:在第16行的非对象上调用成员函数prepare()

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

Stack Overflow用户
提问于 2014-03-17 02:54:49
回答 2查看 161关注 0票数 0

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

这是我的密码。

代码语言:javascript
复制
<?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...

代码语言:javascript
复制
<?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);
?>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-17 02:59:15

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

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

代码语言:javascript
复制
function UniqueID($db) {
                  ^^^

当你调用这个函数时

代码语言:javascript
复制
UniqueID($db)

或者将包含放在您的函数中。

代码语言:javascript
复制
function UniqueID() {
    include("sql.php");

或者声明全局

代码语言:javascript
复制
function UniqueID() {
 global $db
票数 1
EN

Stack Overflow用户

发布于 2014-03-17 02:58:45

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22446162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档