簡體   English   中英

如果一個變量不是空的PHP,如何只更新一個SQL表列?

[英]How to only update an sql table column if a variable is not empty with php?

我使用php從表單字段中獲取變量:

    $url=$_POST['url'];
    $tags=$_POST['tags'];
    $skillArea=$_POST['skill_area'];
    $description=$_POST['description'];
    $slideshowImageFileName=($_FILES['imageNameSlideshow']['name']);

但是當我運行我的sql insert查詢時,如果其中一個變量為空,我會收到錯誤,所以我已經寫了if語句來處理這個以重寫查詢字符串,但當然,那不是答案嗎? 看起來很亂

if(empty($slideshowImageFileName)){

        $query1="INSERT INTO portfolio (item_name,image_path,description,url) VALUES('$itemName','$imageFileName','$description','$url')"; 

    }else{

        $query1="INSERT INTO portfolio (item_name,image_path,description,url,slideshow_image_path) VALUES('$itemName','$imageFileName','$description','$url','$slideshowImageFileName')"; 
    }

我想你正在尋找這樣的東西:

$slideshowImageFileName = (isset($_FILES['imageNameSlideshow']['name']) && !empty($_FILES['imageNameSlideshow']['name'])) ? $_FILES['imageNameSlideshow']['name'] : NULL;

這將檢查是否設置了幻燈片圖像的名稱而不是空。 如果為NULL則將分配給變量,如果其值正確則將分配該值。

如果要添加空字符串,可以用“”替換NULL。

嘗試將$ slideshowImageFileName的值設置為空字符串或數據庫表將接受的單個空格,並始終使用第二個查詢。

if(empty($slideshowImageFileName)){
$slideshowImageFileName = "";
}

$query1="INSERT INTO portfolio (item_name,image_path,description,url,slideshow_image_path) VALUES('$itemName','$imageFileName','$description','$url','$slideshowImageFileName')"; 

這有幾個選擇。

最簡單的方法是確保變量始終設置,即使沒有傳遞:

//Set up your database connection as normal, check errors etc.
$db = mysqli_connect($host,$user,$password,$db);

$url = isset($_POST['url']) ? mysqli_real_escape_string($db, $_POST['url']) : "";
$tags= isset($_POST['tags']) ? mysqli_real_escape_string($db, $_POST['tags']) : "";

轉義數據是很好的做法:)在INSERT查詢中,您仍然需要將值包裝在引號中,或者您可以根據您的偏好在上面的代碼中執行此操作。

http://uk3.php.net/manual/en/mysqli.construct.php

我同意雷先生的意見。 但除此之外還有另一種解決方案。 表上的slideshow_image_path字段可能不允許為null。 因此,您可以通過允許null來更改屬性,它將起作用。

如果我確定我會獲得很多可選數據,我可能會構建一個構建器。

像這樣:

$acceptedKeys = array
  ('item_name', 
   'image_path',
   'description', 
   'url',
   'slideshow_image_path');
$inserts = array();

foreach($_GET as $key => $var) {
  if(in_array($key, $acceptedKeys)) {
    // clean and validate your keys here!
    $inserts[$key] = $var;
  }
}

$customKeys = implode(array_keys($inserts), ',');
$customValues = implode($inserts, ',');

$query = "INSERT INTO portfolio ($customKeys) VALUES($customValues)";

暫無
暫無

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

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