2013-10-05 153 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。不過謝謝你的支持和所有建議。 –