-2

この関数を使用して、ユーザーのエラーをデータベースに挿入します。私の公開機能は次のとおりです。

public function set_error($var) {
        $dsn = 'mysql:***;host=***';
        $username = '***';
        $passd = '***';

        try {
            $pdo = new PDO($dsn, $username, $passd);
            $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1);
            $stmt = $pdo->prepare("INSERT INTO errors (ip, code, browser, referer, script, email, date) VALUES (:ip, :code, :browser, :referer, :script, :email, :date)");
            $params = array('ip' => $_SESSION['info_utente']['ip'], 'code' => $var, 'browser' => $_SESSION['info_utente']['browser'], 'referer' => $_SESSION['referer'], 'script' => $_SESSION['info_utente']['script'], 'email' => $_SESSION['sessione_attiva']['email'],'date' => $this->ftime());
            $stmt->execute($params);
            return TRUE;
        } catch (PDOException $e) {
            return FALSE;
        }
    }

同様の機能(アカウントへの挿入)があり、これは機能します!

したがって、ユーザーにエラーが発生した場合は、関数 set_error を別の関数 (サインアップまたはログイン) に呼び出します。関数を次のように呼び出します。しかし、うまくいきません。

データベースを確認しましたが、すべて問題ありません。列の名前は問題ありません。すべて VARCHAR(255) です。

正確に:

$this->set_error("error_1");
return "error_1";

なぜこれが機能しないのですか?

事前に感謝し、私の英語が下手である場合は申し訳ありません!

4

1 に答える 1

-3

まず、メソッドでもアプリケーション クラスでも接続しないでください。しかし、どこかに $pdo オブジェクトを作成し、それをコンストラクターでアプリケーション クラスに渡し、クラス変数に割り当てます。
次に、実際にエラーをスローするように PDO を構成する必要があります。同様に、PHP エラー報告全体を設定する必要があります。第三に、これが何のためにあるのかがわかるまで
、これを取り除かなければなりません。try..catch

したがって、関数は次のようになります

public function set_error($var) {
    $sql = "INSERT INTO errors (ip, code, browser, referer, script, email, date) 
                   VALUES (?, ?, ?, ?, ?, ?)";
    $stmt = $this->pdo->prepare($sql);
    $params = array($_SESSION['info_utente']['ip'],
                    $var, 
                    $_SESSION['info_utente']['browser'], 
                    $_SESSION['referer'], 
                    $_SESSION['info_utente']['script'],
                    $_SESSION['sessione_attiva']['email'],
                    $this->ftime()
               );
    $stmt->execute($params);
}
于 2013-10-05T16:44:10.333 に答える