簡體   English   中英

從PHP中不為空的輸入將數據插入MySQL數據庫

[英]Insert data into MySQL database from inputs that are not empty with PHP

我有一個頁面,用戶可以在其中更新或更改其個人資料信息,例如他的位置或個人資料圖片。 默認情況下,每個用戶都在其個人資料頁面上獲取占位符數據或信息,並且mysql數據庫中的這些字段為空或不存在具有該用戶ID的行。 因此,首先我要檢查用戶以前是否將其個人資料信息輸入到數據庫中,以及是否存在數據,我將使用不為空的輸入字段對其進行更新,並且這部分工作正常。 但是,如果數據庫中不存在數據或具有該用戶ID的行不存在,那么我想插入數據,但又只能插入不為空的輸入

但這是我得到的錯誤

消息為“ SQLSTATE [42000]”的未捕獲的異常“ PDOException”:語法錯誤或訪問沖突:1064您的SQL語法有錯誤; ...

這是我的代碼( $userID是會話$userID = $_SESSION['ID'];

if(isset($_POST['updateInfo'])) {
$userDesc = filter_var($_POST['description_update'], FILTER_SANITIZE_STRING);
$userLocation = filter_var($_POST['location_update'], FILTER_SANITIZE_STRING);
$userBirthDate = filter_var($_POST['birthDate_update'], FILTER_SANITIZE_STRING);
$user_picture_tmp = $_FILES['user_picture']['tmp_name'];
$user_picture_name = $_FILES['user_picture']['name'];


$checkInfo = $con->prepare("SELECT * FROM user_info WHERE userid=:userID");
$checkInfo->execute(array(':userID' => $userID));
$data = $checkInfo->fetch(PDO::FETCH_ASSOC);    
$count_rows = $checkInfo->rowCount();

//Here i am checking if data exists in mysql and UPDATING it    
if($count_rows > 0) {   

    if(!empty($userDesc)) {
        $query = $con->prepare("UPDATE user_info SET description=:description WHERE userid=:userID");
        $query->execute(array(':userID' => $userID, ':description'=> $userDesc));
    }   
    if(!empty($userLocation)) {
        $query = $con->prepare("UPDATE user_info SET location=:location WHERE userid=:userID");
        $query->execute(array(':userID' => $userID, ':location'=> $userLocation));
    }
    if(!empty($userBirthDate)) {
        $query = $con->prepare("UPDATE user_info SET birthDate=:birthDate WHERE userid=:userID");
        $query->execute(array(':userID' => $userID, ':birthDate'=> $userBirthDate));
    }
    if(!empty($user_picture_name)) {
        $query = $con->prepare("UPDATE user_info SET profile_pic=:profile_pic WHERE userid=:userID");
        move_uploaded_file($user_picture_tmp, 'user_pic/'.$user_picture_name);
        $query->execute(array(':userID' => $userID, ':profile_pic'=> $user_picture_name));

    }   
    //But if data doesn't exists i want to INSERT IT and here is error
}   else {

    if($userDesc AND $userLocation AND $userBirthDate AND $user_picture_name != '') {

        $query = $con->prepare("INSERT INTO user_info(userid) VALUES(:userID)");
        $query->execute(array(':userID' => $userID));

        if(!empty($userDesc)) {
            $query = $con->prepare("INSERT INTO user_info(description) VALUES(?) WHERE userid=?");
            $query->execute(array($userDesc, $userID));
        }   
        if(!empty($userLocation)) {
            $query = $con->prepare("INSERT INTO user_info(location) VALUES(?) WHERE userid=?");
            $query->execute(array($userLocation, $userID));
        }
        if(!empty($userBirthDate)) {
            $query = $con->prepare("INSERT INTO user_info(birthDate) VALUES(?) WHERE userid=?");
            $query->execute(array($userBirthDate, $userID));
        }   
        if(!empty($user_picture_name)) {
            $query = $con->prepare("INSERT INTO user_info(profile_pic) VALUES(?) WHERE userid=?");
            move_uploaded_file($user_picture_tmp, 'user_pic/'.$user_picture_name);
            $query->execute(array($user_picture_name, $userID));

        }
    } else {echo 'All fields are empty';} 

}                       
}

所以我的問題是,為什么我會收到此錯誤,我又以錯誤的方式進行此操作,還是有其他更好的方法來執行此操作? 這只是出於學習目的。

你在那里做很多插入! 您只能插入一個!

嘗試將您的else語句替換為以下內容:

else {
    if($userDesc AND $userLocation AND $userBirthDate AND $user_picture_name != '') {

        if($userDesc = ''){$userDesc = 'Placeholder description';}
        if($userLocation = ''){$userLocation = 'Placeholder location';}
        if($userBirthDate = ''){$userBirthDate = 'Placeholder birthdate';}
        if($user_picture_name = ''){$user_picture_name = 'Placeholder picture_name';}

        if ($stmt = $con->prepare("INSERT INTO user_info(description, location, birthDate, profile_pic ) VALUES(?,?,?,?)")) {
            $stmt->bind_param("ssss", $userDesc, $userLocation,$userBirthDate, $user_picture_name );
            $stmt->execute();
        }
    } else {echo 'All fields are empty';} 
}  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM