首页 > 解决方案 > 连接失败:SQLSTATE [HY000]:一般错误:1366 整数值不正确

问题描述

基本上我试图从一个 url 获取一个 ID 并将其插入数据库,最初我有一个未定义的变量错误,所以我环顾四周,我看到一些线程建议$id = '';删除这个问题,我可以确定它确实,但是我注意到它没有插入到我的数据库中,所以我将它包装在 atry中,看看它是否给了我一个错误,它确实给了我一个错误,完整的错误是

  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]);
}           

标签: phpsql

解决方案


默认情况下,它bindValue()假定一个字符串数据类型。如果你想使用类似 INT 的东西,你需要将它添加到调用中。

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

:userId如果那也是 INT,您可能还需要这样做

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

您还应该检查$idand$userId变量是否包含一个值并且它是一个整数

我还注意到您在一个if ($_SERVER['REQUEST_METHOD'] == 'POST')块内,但是正在使用将您的默认设置为空字符串的行获取您的$idfrom ?这也可能是您问题的一部分!$_GET['id']$id$id = '';


推荐阅读