连接失败:SQLSTATE [HY000]:常规错误:1366不正确的整数值

时间:2018-09-01 14:56:08

标签: php sql

基本上,我试图从URL中获取一个ID并将其插入数据库中,最初我遇到未定义的变量错误,所以我环顾四周,发现有几个线程建议$id = '';来解决此问题,从我可以确定的结果来看,但是我注意到它没有插入数据库中,因此我将其包装在try中,以查看它是否给了它一个错误,完全是

  Connection failed: SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'reviewId' at row 1

我的代码        

require ("classes/Stats.php");
require ("classes/Database.php");

        if ($_SERVER['REQUEST_METHOD'] == 'POST')
        {
            $id = '';
            $socValidation = new Stats();
            if(isset($_GET['id']) && $_GET['id'] !== '')
            {
                $id = $_GET['id'];
            }
            $post = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING); 

            $userId =  $_SESSION["userId"];
            $messages = $post['addComment'];
            $errors = array();

            $fields = array(
            'messages' => array(        
                'validate' => 'socMessage',
                'message' => 'Please enter a minimum of three characters',
                'value' => $messages
            )
            );

            foreach($fields as $key => $value) 
            {
                $validation_result = $socValidation->{$value['validate']}($value['value']);

                if(!$validation_result) 
                {
                    $errors[] = ['name' => $key, 'error' => $value['message']];
                }
            }

            if(empty($errors))  
            {  
                try 
            {
                $db = new Database();
                $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                $success = ["response" => "Your notes have been saved"];
                $process = $db->prepare('INSERT INTO reviewReplies (reviewComment, reviewId, userId, dateAdd) VALUES (:addComment, :id, :userId, NOW())');
                $process->bindValue(':addComment', $messages);
                $process->bindValue(':id', $id);
                $process->bindValue(':userId', $userId);
                $process->execute();
                }
                catch (PDOException $e) {
                echo 'Connection failed: ' . $e->getMessage();
            }


            }

        }       

header('Content-Type: application/json');
if (empty($errors))
{
    echo json_encode($success);
}
else
{
    echo json_encode(["errors" => $errors]);
}           

1 个答案:

答案 0 :(得分:0)

默认情况下,bindValue()假定为字符串数据类型。如果要使用类似INT的功能,则需要将其添加到通话中。

$process->bindValue(':id', $id, PDO::PARAM_INT);

如果这也是一个INT,您可能还需要使用:userId来完成此操作

$process->bindValue(':userId', $userId, PDO::PARAM_INT);
  

您还应该检查$id$userId变量是否包含值,并且该值是整数

     

我还注意到您在if ($_SERVER['REQUEST_METHOD'] == 'POST')块内,但是从$id获取$_GET['id']的一行将$id设置为空字符串{{1 }}作为默认值?这也可能是您遇到的问题的一部分!