PDO插入不工作 [关闭] 。

问题描述 投票:-2回答:1

我使用这个函数将用户的错误插入到数据库中。我的公共函数是这样的。

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函数调用到另一个函数中(注册或登录),如果用户有错误,我就调用这个函数:$this->set_error("error_1");但不工作。

我检查了数据库,一切正常。列名也没问题,而且都是VARCHAR(255)。

正是如此。

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

为什么不能用?

先谢谢你,如果我的英语不好,对不起

php pdo
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);
}
© www.soinside.com 2019 - 2024. All rights reserved.