0

我在使用 PDO 时遇到了一些问题。一切似乎都是正确的,但我收到了这个错误

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。

很高兴在这方面提供任何帮助;)

4

2 回答 2

3

已经在评论中说过,但看起来你不需要占位符周围的引号。只需依靠 Prepared Statement 机制为您完成。

注意:对于 MySQL,PDO 默认模拟准备好的语句。为了获得额外的安全性,您可能希望将其设置为使用真正的准备好的语句。

$pdo -> setAttribute (PDO::ATTR_EMULATE_PREPARES, false); 
于 2012-06-13T12:34:14.250 回答
2

尝试这个:

$sql = "INSERT INTO sys_users(nome,email,password,salt,permissao,activo)
        VALUES(:nome,:email,:password,:salt,:permissao,:activo)";       
于 2012-06-13T12:25:26.180 回答