2017-04-17 36 views
0

我有一個產品可以編輯並添加一種語言。在我目前的api中,如果已經有一種語言,它可以被顯示並且可以被更新,但是我的問題是如果沒有其他細節,例如,當我編輯它時輸入一個新的語言,數據不會保存在數據庫。在一個查詢API和PHP中插入或更新

if(!empty($body['addtl'])){ 
     $ProdArray = ""; 
     foreach($body['addtl'] as $value){ 
      foreach($value as $key => $innerValue){ 
        if($key!="id") 
         if(!empty($innerValue)) 
          $ProdArray .= $key."='".$innerValue."', "; 
      } 

      $ProdArray = trim($ProdArray, ", "); 
      $ProdArray .= " WHERE id=".$value['id']; 
      $sql_query = "UPDATE ProductAddtlDetails SET ".$ProdArray; 
      $stmt = $dbRemote->prepare($sql_query); 
      $stmt->execute(); 
      $ProdArray = ""; 
     } 
     $editFlag = 1; 
    } 

我該如何解決我的問題?

+1

** WARNING **:這有一些嚴重的[SQL注入漏洞](http://bobby-tables.com/),因爲在查詢中使用了「$ _GET」數據。儘可能使用**準備好的陳述**。這些在['mysqli'](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)和[PDO](http://php.net/manual/)中很簡單en/pdo.prepared-statements.php)其中任何用戶提供的數據都是用'?'或':name'指示符指定的,後者使用'bind_param'或'execute'填充,具體取決於您使用的是哪一個。 **絕不**將'$ _POST'或'$ _GET'數據直接放入您的查詢中。 – tadman

+1

我在這裏看不到任何錯誤。查詢是否有效?它炸燬了嗎?你需要找出答案。最簡單的方法是使用任何驅動程序啓用異常。 – tadman

回答

0

首先,我們可以使錯誤模式,使您可以在連接後把這個:

$dbRemote->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

那麼你的代碼改成這樣:

if(!empty($body['addtl'])){ 
    $ProdArray = ""; 
    foreach($body['addtl'] as $value){ 
    foreach($value as $key => $innerValue){ 
      if($key!="id" && !empty($innerValue)) { 
      $ProdArray .= $key."=". $innerValue. ", "; 
      } 
    } 
    $ProdArray = rtrim($ProdArray, ", "); 
    $ProdArray .= " WHERE id=".$value['id']; 
    $sql_query = "UPDATE ProductAddtlDetails SET ".$ProdArray; 
    $stmt = $dbRemote->prepare($sql_query); 
    $stmt->execute(); 
    $ProdArray = ""; 
    } 
    $editFlag = 1; 
} 
+0

仍然沒有保存數據 – bleykFaust

+0

@bleykFaust你有導入你的連接 –