基本上,我试图从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]);
}
答案 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 }}作为默认值?这也可能是您遇到的问题的一部分!