【问题标题】:Pdo insert query in for loopPdo 在 for 循环中插入查询
【发布时间】:2021-12-31 11:41:31
【问题描述】:

我在哪里做错了? Count($sepetler) => 2 row.İts ok.不是问题这里值关键变量真相在这里不是问题。但不能工作 exec.这里的所有代码。我相信 $sepet 数组和变量但是.İnsert 语句是问题。请帮我查找错误

    $dbConfig=new DBConfig();
    $baglanti = new PDO("mysql:host=".$dbConfig->host.";dbname=".$dbConfig->dbname, $dbConfig->dbuser, $dbConfig->password);
    $baglanti->exec("SET NAMES utf8");
    $baglanti->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $siparis_kodu=$post["merchant_oid"];
    $sepetGetirSql = "select * from sepetler where siparis_kodu='".$siparis_kodu."'";
    //
    $sepetler = array();


  $queryResultSepetList = $baglanti->query( $sepetGetirSql, PDO::FETCH_ASSOC );
  if ( $queryResultSepetList->rowCount() > 0 ) {
      foreach ( $queryResultSepetList as $row ) {
          array_push( $sepetler, $row );
        }
      }
            $sepet_say=count($sepetler);


            for ($i=0; $i <count($sepetler) ; $i++) {
                $statement = $baglanti->prepare("SELECT urun_adi,urun_fiyati FROM urunler WHERE urun_id = :urun_id");
                $statement->execute(array( ":urun_id" => $sepetler[0]["urun_id"] ));
                $urun_bilgileri = $statement->fetch(PDO::FETCH_ASSOC);

                $query = $baglanti->prepare("INSERT INTO siparisler SET
                  urun_id = ?,
                  miktar = ?,
                  urun_fiyati = ?,
                  siparis_kodu = ?,
                  kargo_takip_no = ?,
                  odeme_durumu = ?,
                  uye_id = ?");
                  $insert = $query->execute(array(
                    $sepetler[$i]["urun_id"], $sepetler[$i]["miktar"], $urun_bilgileri["urun_fiyati"],$sepetler[$i]["siparis_kodu"],"",0,$sepetler[$i]["uye_id"]
                  ));
                  $mesaj="başarılı sipariş";
              }

【问题讨论】:

  • 如果您没有用分隔符将字符串括起来,您的查询中可能会出现语法错误。也就是说,如果您使用准备好的语句,这会更容易,但这里不是这种情况,并且会使您的代码容易受到 SQL 注入的攻击。
  • 请做一些适当的错误处理(检查你的错误日志,配置 PDO 以在错误时抛出异常),看看它抱怨什么。但正如@AymDev dev 所说,使用带有占位符的准备好的语句,而不是像这样直接将数据注入到您的查询中。以您当前的方式进行操作更容易出错且不安全。
  • 我正在编辑代码。请朋友们帮帮我
  • 您总是在循环中使用$sepetler[0]["urun_id"] 获取,如果这是$sepetler[$i]["urun_id"](使用$i)来获取相关数据。

标签: php pdo insert


【解决方案1】:

看起来您正在对 INSERT 语句使用 UPDATE 语法。

应该是:

INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...); 

或者如果您按顺序填充所有列,则可以将其缩短为:

INSERT INTO table_name VALUES (value1, value2, value3, ...); 

【讨论】:

【解决方案2】:
  $prepare = $baglanti->prepare("INSERT INTO siparisler SET urun_id = :urun_id,miktar=:miktar,urun_fiyati=:urun_fiyati,siparis_kodu=:siparis_kodu,kargo_takip_no=:kargo_takip_no,odeme_durumu=:odeme_durumu,uye_id=:uye_id");

  $veriler = [
      "urun_id" =>  $sepetler[$i]["urun_id"],
      "miktar" =>  $sepetler[$i]["miktar"],
      "urun_fiyati" =>  $urun_bilgileri["urun_fiyati"],
      "siparis_kodu" =>  $sepetler[$i]["siparis_kodu"],
      "kargo_takip_no" =>  "",
      "odeme_durumu" => 1,
      "uye_id" => $sepetler[$i]["uye_id"]
  ];
  // verileri çalıştır
  $prepare->execute($veriler);

这对我有用。问题已解决。谢谢大家

【讨论】:

    猜你喜欢
    • 2014-10-03
    • 2019-03-02
    • 2023-03-10
    • 2015-08-12
    • 1970-01-01
    • 2016-06-29
    • 2013-06-08
    • 2013-09-03
    • 2014-01-14
    相关资源
    最近更新 更多