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

コメントですでに述べていますが、プレースホルダーを引用符で囲む必要はないようです。それを行うには、プリペアドステートメントメカニズムに依存するだけです。

注: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 に答える