sourcetip

IMG dir는 db에 저장할 수 없지만 쿼리에 사용된 동일한 변수에서 볼 수 있습니다.

fileupload 2023. 8. 21. 21:31
반응형

IMG dir는 db에 저장할 수 없지만 쿼리에 사용된 동일한 변수에서 볼 수 있습니다.

저는 산웨브의 아래 양식을 이용하여 제 서버에 이미지를 업로드하려고 합니다.여기서 찾을있습니다.하지만 업로드를 누르면 새 엄지손가락이 완벽하게 로드됩니다.그러나 이미지를 보는 것과 동일한 변수를 사용하여 이미지를 데이터베이스에 업로드할 수 없습니다.왜요?나는 그것을 넣으려고 했습니다.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;
}

편집 2: 이제 쿼리가 실행되지만 "프로필 사진을 업로드할 수 없습니다"라는 피드백이 표시됩니다.쿼리가 제대로 실행되지 않는 이유는 무엇입니까?

편집 4: 변경을 시도했습니다.user_session = :session_user로.id = 1대신.업로드가 성공적으로 완료되지만 값은 다음에 삽입됩니다.profile_picture_temp0으로 설정됩니다.어떻게든 bindParam이 값을 변경합니다. 왜죠?

편집 3: 이제 사용해 보았습니다.mysqli뿐만 아니라.여기도 같은 결과입니다.반환을 업로드할 수 없습니다.그러나 DB의 값은 변경되지 않습니다.

$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();

이 줄이 PHP 오류를 발생시키지 않는 것이 확실합니까?

$confirm_upload_db = $$profile_pic_db_upload->rowCount();
                     ^^

$$(2달러 기호)는 변수를 참조하는 방법입니다. 하지만$profile_pic_db_upload다른 변수의 이름이 포함되어 있지 않습니다. PDO 문 개체에 대한 참조입니다.

또 다른 쪽지. 그.rowCount()function은 영향을 받는 행의 수를 반환합니다.UPDATE문; UPDATE 문이 성공했지만 행이 실제로 변경되지 않은 경우(열에 할당된 값이 열에 이미 저장된 값과 동일하기 때문),rowCount()0을 반환합니다.

해당 동작을 변경하고 일치하는 행 수를 반환하려면 다음을 사용할 수 있습니다.PDO::MYSQL_ATTR_FOUND_ROWS).

다음 쿼리를 사용하여 문제를 해결했습니다.

$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가명을 사용해서 어떻게든 고쳤습니다.

언급URL : https://stackoverflow.com/questions/30539060/img-dir-cant-be-stored-in-db-but-viewed-from-the-same-variables-used-in-query

반응형