2012-06-13 129 views
0

我在使用PDO時遇到了一些問題。這一切似乎是正確的,但我得到這個錯誤SQLSTATE [HY000]:一般錯誤:1366錯誤的整數值:

SQLSTATE[HY000]: General error: 1366 Incorrect integer value: ':permissao' for column 'permissao' at row 1\n 

下面是打印輸出

$this->nome = $nome; 
    $this->email = $email; 


    $salt = $this->generateSalt(); 
    $permissao = 10; 
      $activo = 0; 
    #encripta chama a funcao para encriptar a password do utilizador 
    $this->password = $this->pwdEncript($password, $salt); 

$params = array('nome'=>$this->nome, 
          'email'=> $this->email, 
          'password'=> $this->password, 
          'salt'=>$salt, 
          'permissao'=>$permissao, 
          'activo'=>$activo); 


    $sql = "INSERT INTO sys_users(nome,email,password,salt,permissao,activo) 
       VALUES(':nome',':email',':password',':salt',':permissao',':activo')";  


    try 
    { 
     $sth = $this->db->prepare($sql); 
        $sth->execute($params); 
    } 
    catch(PDOException $e) 
    { 
     echo 'Erro ao inserir na base de dados'.$e->getMessage().'\n'; 
    } 

Permissao是在MySQL表中的INT的代碼。

很高興爲這一個給予任何幫助;)

+0

$ permissao的價值是什麼? – GordonM

+0

@PeeHaa如果我轉換爲int,我會得到相同的結果。 我更新了代碼。它基本上是從1到10的數字值。 –

+3

我有一個偷偷摸摸的懷疑,它是你在所有參數佔位符周圍引用的引號。由於準備好的語句無論如何都會爲您插入字符串,您不需要它們,這可能會導致您遇到麻煩。 – GordonM

回答

2

試試這個:

$sql = "INSERT INTO sys_users(nome,email,password,salt,permissao,activo) 
     VALUES(:nome,:email,:password,:salt,:permissao,:activo)";  
+0

像魅力一樣工作!非常感謝!在我嘗試這一點之前,我會休息幾天。 –

3

已經表示,在評論,但它看起來像你不需要周圍的佔位符引號。只需依靠Prepared Statement機制爲您做到這一點。

注意:對於MySQL,PDO默認模擬預準備語句。爲了提高安全性,您可能需要將其設置爲使用實際準備的語句。

$pdo -> setAttribute (PDO::ATTR_EMULATE_PREPARES, false); 
相關問題