Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SQLSTATE[HY000]:一般错误:1366不正确的整数值:_Php_Mysql_Pdo - Fatal编程技术网

Php SQLSTATE[HY000]:一般错误:1366不正确的整数值:

Php SQLSTATE[HY000]:一般错误:1366不正确的整数值:,php,mysql,pdo,Php,Mysql,Pdo,我在使用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()

我在使用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

很高兴在这件事上得到了帮助;)

试试这个:

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

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

已经在评论中说过了,但是看起来你不需要在占位符周围加引号。只需依靠预先准备好的语句机制就可以为您做到这一点

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

$pdo -> setAttribute (PDO::ATTR_EMULATE_PREPARES, false); 

已经在评论中说过了,但是看起来你不需要在占位符周围加引号。只需依靠预先准备好的语句机制就可以为您做到这一点

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

$pdo -> setAttribute (PDO::ATTR_EMULATE_PREPARES, false); 

$permissao的值是多少?@PeeHaa如果我将其转换为int,则得到相同的结果。我已经更新了代码。基本上是一个从1到10的数值。我有一个隐秘的怀疑,就是你在所有参数占位符周围加的引号。由于准备好的语句会为您转义插入的字符串,所以您不需要它们,而且它们可能给您带来麻烦。@GordonM,谢谢!成功了!$permissao的值是多少?@PeeHaa如果我将其转换为int,则得到相同的结果。我已经更新了代码。基本上是一个从1到10的数值。我有一个隐秘的怀疑,就是你在所有参数占位符周围加的引号。由于准备好的语句会为您转义插入的字符串,所以您不需要它们,而且它们可能给您带来麻烦。@GordonM,谢谢!成功了!工作得很有魅力!谢谢!在我尝试之前,我已经放松了好几天。工作得很有魅力!谢谢!在我尝试之前,我已经放松了好几天。