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



>基本上我正在尝试从 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]);
}           

默认情况下,bindValue()采用字符串数据类型。如果要使用类似INT的内容,则需要将其添加到调用中。

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

您可能还需要使用:userId执行此操作,如果这也是 INT,则可能需要执行此操作

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

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

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

最新更新