我在我的网站上有一个注册系统,我正在将我所有的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);
?>
您的数据库连接- $db
-超出范围。见http://www.php.net/manual/en/language.variables.scope.php
你需要添加它作为一个函数参数
function UniqueID($db) {
^^^
和调用函数
时UniqueID($db)
或者将include放入函数
function UniqueID() {
include("sql.php");
或声明全局
function UniqueID() {
global $db
Scope在PHP中不是全局的。您的$db->execute
调用在UniqueID
函数内,并且该函数无法访问sql.php中定义的$db
变量。如果您更改UniqueId
函数以接受数据库参数,然后将该参数传递给该函数,您将能够访问它。