【问题标题】:Insert or Update in one Query API and PHP在一个查询 API 和 PHP 中插入或更新
【发布时间】:2017-09-12 15:46:30
【问题描述】:

我有一个可以编辑和添加语言的产品。在我当前的 api 中,如果已经有一种语言,它可以显示并且可以更新,但我的问题是,如果没有附加细节,例如,我在编辑它时输入了一个新的,数据不会保存在数据库。

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;
    }

如何解决我的问题?

【问题讨论】:

  • 警告:这有一些严重的SQL injection bugs,因为在查询中使用了$_GET 数据。尽可能使用准备好的语句。在mysqliPDO 中执行这些操作非常简单,其中任何用户提供的数据都使用?:name 指示符指定,稍后使用bind_paramexecute 填充,具体取决于您是哪个使用。 切勿$_POST$_GET 数据直接放入您的查询中。
  • 我在这里没有看到任何错误检查。查询有效吗?是不是炸了?你需要找出答案。最简单的方法是使用您使用的任何驱动程序启用异常。

标签: php html mysql angularjs api


【解决方案1】:

首先我们可以启用错误模式,这样你就可以在连接之后把它:

$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;
 }

【讨论】:

  • 仍然没有保存数据
  • @bleykFaust 你导入了你的连接
猜你喜欢
  • 2014-06-26
  • 2014-02-09
  • 2013-03-13
  • 2016-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多