我在我的网站上有一个注册系统,我将我所有的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);
?>发布于 2014-03-17 02:59:15
您的数据库连接-- $db --超出了范围。请参阅http://www.php.net/manual/en/language.variables.scope.php
您需要将其作为函数参数添加。
function UniqueID($db) {
^^^当你调用这个函数时
UniqueID($db)或者将包含放在您的函数中。
function UniqueID() {
include("sql.php");或者声明全局
function UniqueID() {
global $db发布于 2014-03-17 02:58:45
PHP中的范围不是全局的。您的$db->execute调用在UniqueID函数中,该函数无法访问sql.php中定义的$db变量。如果您修改您的UniqueId函数以接受数据库参数,然后将该参数传递给该函数,您将能够访问它。
https://stackoverflow.com/questions/22446162
复制相似问题