我的网站上有一个注册系统,我正在将我的所有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);
?>
答案 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