我是PDO的新手,如果这可能相当简单,那么道歉,但是我花了好几个小时试图找到答案,因此无法发布。
我的函数文件中存储了一个函数:
function insertlogs($user)
{
$page = basename($_SERVER['PHP_SELF']);
$ip = GetIP();
$ub = getBrowser();
$regdate = date("Y-m-d");
$regtime = date("H:i:s");
try{
$sql = "INSERT INTO admin_logs (id,
page,
ip,
browser,
loggedinuser,
date,
time) VALUES (
:gid,
:page,
:ip,
:ub,
:user,
:regdate,
:regtime )";
$stmt = $db->prepare($sql);
$stmt->bindParam(':gid', $gid );
$stmt->bindParam(':page', $page);
$stmt->bindParam(':ip', $ip);
$stmt->bindParam(':ub', $ub);
$stmt->bindParam(':user', $user);
$stmt->bindParam(':regdate', $regdate);
$stmt->bindParam(':regtime', $regtime);
$stmt->execute();
}
catch(PDOException $e) {
echo $e->getMessage();
}}
当我独立运行时,它工作正常。但是当我调用这个函数时insertlogs($ user);它给了我致命的错误:在......错误的非对象上调用成员函数prepare()。
我已经检查了连接,这看起来很好,我只是想弄明白吗?任何帮助或指示将非常感激。
答案 0 :(得分:1)
当我独立运行时,它工作正常。但是,当我打电话给这个 function insertlogs($ user);它给了我致命的错误:呼唤一个 成员函数prepare()对......中的非对象错误。
我想通过“我独立运行” - 你的意思是你运行代码超出了函数的范围。当你将它作为函数调用时,$ db是一个全局变量,php不知道它。并认为,它是本地的,请看这里的第二个例子:
http://php.net/manual/en/language.variables.scope.php
所以,要么将它作为第二个变量传递(最好):
function insertlogs($user, &$db)
或使用global:
function insertlogs($user)
{
global $db;