2013-10-05 120 views
-2

我用这个函数向数据库插入用户的错误。我的公开功能是这样的:PDO插入不起作用

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"; 

为什么这不起作用?

如果我的英语不好,请提前致谢!

+0

什么是在异常$ E中的错误信息?这应该给你一些它为什么失败的迹象。但是你忽略了它。 –

+0

注意:在寻求有关错误的帮助之前,请单独删除'catch $ e - Ignore' – webnoob

+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); 
} 
+0

我发现了这个问题。所有参数(电子邮件等)为NULL,但在数据库中它不能为NULL。不过谢谢你的支持和所有建议。 –