Slim Php Mysql Put метод пустое значение, хотите обновить 4 столбца, но обновлен только 1 столбец, но результат указывает на успех

Моя цель - обновить 4 столбца в моей таблице за один запрос. Но в итоге обновляется только 1 столбец, а остальные 3 - нет.

Мой запрос такой

$stmt = $this->conn->prepare("UPDATE users_info SET profile_image_path = ?,user_bio = ? ,gender = ?,date_of_birth = ? WHERE user_id = ?");
$stmt->bind_param("sssii",$profile_image_upload_url,$user_bio,$gender,$date_of_birth,$user_id);
$result = $stmt->execute();
$stmt->close();
return $result;

Вот мой код для вызова запроса

//update to database
global $user_id;
$db = new DBhandler();
$update_result = $db->callForQueryFunction($user_id,$user_bio,$date_of_birth,$gender,$profile_image_string);
$response = array();

if($update_result){
    $response['error'] = false;
    $response['message'] ="sucess";
}else{
    $response['error'] = true;
    $response['message'] ="fail";
}

После запуска в расширенном клиенте отдыха, с помощью следующего запроса

user_bio= хихи & пол = F &profile_image_string=somestringhere&date_of_birth=2015-08-16

После выполнения запроса результат всегда будет "успешным", но только в таблице Mysql profile_image_path колонка обновлена, остальные 3 колонки user_bio, date_of_birth а также gender все не обновляются.

Вот моя структура базы данных структура базы данных

Я работаю часами, так и не поняв, что не так с кодом или структурой моей базы данных.

Обновление: я пробовал с bind_param за s с $date_of_birth, но все равно не повезло с этим

$stmt->bind_param("ssssi",$profile_image_upload_url,$user_bio,$gender,$date_of_birth,$user_id);

ОБНОВЛЕНИЕ Я на самом деле использую этот пример из Androidhive, пример кода, как показано ниже

       /**
     * Updating existing task
     * method PUT
     * params task, status
     * url - /tasks/:id
     */

$app->put('/tasks/:id', 'authenticate', function($task_id) use($app) {
            // check for required params
            verifyRequiredParams(array('task', 'status'));

            global $user_id;            
            $task = $app->request->put('task');
            $status = $app->request->put('status');

Но я использую тот же метод, что и ниже, чтобы получить значение, но после var_dump() все значение NULL. Вот мой код

$app->put('/updateuserdetails','authenticate',function ()use ($app){

$user_bio  = $app->request()->put('userbio');
$gender    =$app->request()->put('gender');
$date_of_birth = $app->request()->put('dob');
$profile_image_string = $app->request()->put('profilestring');

Я тоже так пробую. Ценность user_bio, gender, date_of_birth все еще null,

$app->post('/updateuserdetails','authenticate',function ()use ($app){

$user_bio  = $app->request()->post('userbio');
$gender    =$app->request()->post('gender');
$date_of_birth = $app->request()->post('dob');
$profile_image_string = $app->request()->post('profilestring');

Я просто не могу понять, что здесь происходит не так

Обновление После того, как я проверил его в Postman, отправив данные с кодом x-www-form-urlencoded, он вышел с этой ошибкой, которую я не могу найти, какое-либо решение

тонкая ошибка

1 ответ

Попробуйте следующее:

$stmt = $this->conn->prepare("UPDATE users_info SET profile_image_path = :image, user_bio = :bio, gender = :gender, date_of_birth = :dob WHERE user_id = :id");

$stmt->bindParam(":image", $profile_image_upload_url, PDO::PARAM_STR);
$stmt->bindParam(":bio", $user_bio, PDO::PARAM_STR);
$stmt->bindParam(":gender", $gender, PDO::PARAM_STR);
$stmt->bindParam(":dob", $date_of_birth, PDO::PARAM_STR);
$stmt->bindParam(":id", $user_id, PDO::PARAM_INT);

$result = $stmt->execute();

$stmt->close();

return $result;
Другие вопросы по тегам