-2

我是 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() in.... 错误。

我已经检查了连接,这似乎很好,我只是想不通?任何帮助或指示将不胜感激。

4

1 回答 1

1

当我独立运行它时,它工作正常。但是,当我调用此函数时 insertlogs($user); 它给了我致命错误:在非对象中调用成员函数 prepare() in.... 错误。

我想“我独立运行它” - 你的意思是你运行代码超出了函数的范围。当您将它作为函数调用时,并且 $db 是一个全局变量,php 不知道它。并且认为它是本地的,请看这里的第二个示例:

http://php.net/manual/en/language.variables.scope.php

因此,要么将其作为第二个变量传递(最好):

function insertlogs($user, &$db)

或使用全局:

function insertlogs($user)
{
    global $db;
于 2013-07-21T17:42:24.970 回答