2013-07-21 76 views
-2

我是PDO的新手,所以很抱歉,如果这可能相当简单,但我花了数小时试图找到答案,因此不得不发布。调用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

您确定'$ db'是一个PDO对象吗? – Ohgodwhy

+0

你还没有在任何地方定义'$ db'。 – PeeHaa

+0

该函数是否可以访问'$ db'? – hjpotter92

回答

1

When I run this independently it works fine. However when I call this function insertlogs($user); Its gives me the Fatal error: Call to a member function prepare() on a non-object in.... error.

我想通过“我独立运行” - 你的意思是你运行的代码超出了功能的范围。当你把它作为函数调用时,$ db是一个全局变量,php不知道它。并认为,这是本地的,看2挡例子在这里:

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

所以,无论是将它作为第二个变量(最好):

function insertlogs($user, &$db) 

或者使用全局:

function insertlogs($user) 
{ 
    global $db; 
+0

谢谢@ user4035。我应该知道更好的:) – skippy