在一个查询API和PHP中插入或更新

问题描述:

我有一个产品可以编辑并添加一种语言。在我目前的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

首先,我们可以使错误模式,使您可以在连接后把这个:

$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你有导入你的连接 –