【发布时间】: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)来获取相关数据。