-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); Fatal error: Call to a member function prepare() on a non-object in.... エラーが表示されます。

接続を確認しましたが、問題ないようですが、わかりませんか? どんな助けや指針も大歓迎です。

4

1 に答える 1

1

これを独立して実行すると、正常に動作します。ただし、この関数を呼び出すと、insertlogs($user); Fatal error: Call to a member function prepare() on a non-object in.... エラーが表示されます。

「これを独立して実行する」とは、関数の範囲外でコードを実行することを意味すると思います。関数として呼び出していて、$db がグローバル変数である場合、php はそれを認識しません。そして、それはローカルだと思います。ここで2番目の例を見てください:

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

したがって、2 番目の変数として渡すか (推奨):

function insertlogs($user, &$db)

またはグローバルを使用します。

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