IMG-каталог не может быть сохранен в db, но просматривается из тех же переменных, которые используются в запросе
Я пытаюсь загрузить изображение на свой сервер, используя следующую форму от Sanwebe.
Здесь можно найти.
Однако, когда я нажимаю выгрузку, новый большой палец загружается отлично. Однако мое изображение не может быть загружено в базу данных, используя те же самые переменные, из которых просматривается изображение. Как так?
Я попытался помещать информацию db
только в начале запроса. Вот так:
echo '<div align="center">';
echo '<img src="images/profile-pictures/'.$thumb_prefix . $new_file_name.'" alt="Thumbnail">';
echo '</div>';
$profile_pic_temp = "../images/profile-pictures/" . $thumb_prefix . $new_file_name;
$profile_pic_full_temp = "../images/profile-pictures/" . $new_file_name;
$session_user = $_SESSION['user_confirm'];
require 'database.php';
$profile_pic_db_upload = $db->prepare("UPDATE login SET profile_picture_temp = :profile_pic_temp, profile_picture_full_temp = :profile_pic_full_temp WHERE user_session = :session_user");
$profile_pic_db_upload->bindParam(':session_user', $session_user, PDO::PARAM_STR);
$profile_pic_db_upload->bindParam(':profile_pic_temp', $profile_picture_temp, PDO::PARAM_STR);
$profile_pic_db_upload->bindParam(':profile_pic_full_temp', $profile_picture_full_temp, PDO::PARAM_STR);
$profile_pic_db_upload->execute();
$confirm_upload_db = $profile_pic_db_upload->rowCount();
if($confirm_upload_db != 0){
$popup_message = "Profile picture has been uploaded.";
echo $popup_message;
}
else{
$popup_message = "Profile picture could not be uploaded.";
echo $popup_message;
}
ИЗМЕНИТЬ ДВА:
Теперь запрос выполняется, однако я получаю обратную связь "Изображение профиля не может быть загружено". Почему запрос не работает должным образом?
EDIT FOUR:
Я попытался изменить user_session = :session_user
на id = 1
. Затем я получаю успешную загрузку, однако значение вводится только в profile_picture_temp
и устанавливается в 0. Как-то переменная bindParam меняет значение. Почему?
ИЗМЕНИТЬ ТРИ:
Теперь я попытался использовать mysqli
. Здесь же результаты. Возврат не может быть загружен. Однако не изменяет значение в БД.
$sql = "UPDATE login SET profile_picture_temp = ? AND profile_picture_full_temp = ? WHERE user_session = ?";
$stmt = $mysqli->prepare($sql) or die ("Database error<br>" . $sql . "<br><b>Error message:</b> " . $mysqli->error);
$stmt->bind_param("sss", $profile_picture_temp, $profile_picture_full_temp, $session_user);
$stmt->execute() or die("Something went wrong");
if($stmt->fetch()){
$popup_message = "Profile picture has been uploaded.";
echo $popup_message;
}
else{
$popup_message = "Profile picture could not be uploaded.";
echo $popup_message;
}
$stmt->free_result();
$stmt->close();
Ответы
Ответ 1
Проблема была исправлена с использованием следующего запроса:
$profile_picture_temp = "../images/profile-pictures/" . $thumb_prefix . $new_file_name;
$profile_picture_full_temp = "../images/profile-pictures/" . $new_file_name;
$session_user = $_SESSION['user_confirm'];
$sql = "UPDATE login l SET l.profile_picture_temp = ?, l.profile_picture_full_temp = ? WHERE l.user_session = ?";
$stmt = $mysqli->prepare($sql) or die ("Database error<br>" . $sql . "<br><b>Error message:</b> " . $mysqli->error);
$stmt->bind_param("sss", $profile_picture_temp, $profile_picture_full_temp, $session_user);
$stmt->execute() or die("Something went wrong");
$result = $stmt->affected_rows;
if($result == 1){
$popup_message = "Profile picture has been uploaded.";
echo $popup_message;
}
else{
$popup_message = "Profile picture could not be uploaded.";
echo $popup_message;
}
$stmt->free_result();
$stmt->close();
Я не могу идентифицировать проблему самостоятельно, однако мне удалось исправить ее, добавив UPDATE login l
. Используя псевдоним, он каким-то образом зафиксировал его.
Ответ 2
Вы уверены, что эта строка не бросает ошибку PHP...
$confirm_upload_db = $$profile_pic_db_upload->rowCount();
^^
Знаки $$
(два доллара) - это то, как мы ссылаемся на переменную переменную; но $profile_pic_db_upload
не содержит имя другой переменной, это ссылка на объект инструкции PDO.
Еще одно примечание. Функция rowCount()
возвращает количество строк, на которые ссылается оператор UPDATE
; если инструкция UPDATE завершается успешно, но никаких изменений в строке не производится (поскольку значения, назначенные столбцам, совпадают с значениями, которые уже хранятся в столбцах), тогда rowCount()
вернет 0.
(Чтобы изменить это поведение, чтобы вернуть число совпадающих строк, вы можете использовать PDO::MYSQL_ATTR_FOUND_ROWS
).