Hocam ilk önce GPT'ye bir sor istersen problemini, aşağıdakini yazdı:
----
Kodunuzu incelediğimde, bazı olası sorunları tespit ettim. İşte dikkat etmeniz gereken bazı noktalar:
- $statement değişkenine sorgu çalıştırdıktan sonra veri almak için fetch işlemi yapmadınız. Bu nedenle $statement üzerinden doğrudan ordersProductID gibi bir değeri almaya çalıştığınızda hata alıyorsunuz. Bunun yerine sorguyu çalıştırdıktan sonra veriyi çekmelisiniz.
- İkinci bir önemli nokta, ikinci UPDATE işlemindeki değişken isimleri. İlk UPDATE sorgusunda :accountOrdersId olarak belirttiğiniz değişkeni ikinci UPDATE sorgusunda kullanmadınız. Bu nedenle bu değişkeni $merchant_oid olarak değiştirmeniz gerekebilir.
- Ayrıca, herhangi bir SQL hatası durumunda bunu belirtmek için hata işleme mekanizması eklemek iyi bir uygulamadır. Örneğin, $db->prepare ve $db->execute çağrılarından dönen sonuçları kontrol ederek hata olup olmadığını kontrol edebilir ve gerekirse uygun şekilde işleyebilirsiniz.
İşte düzeltilmiş bir versiyon:
$query = "UPDATE orders SET ordersStatus = :ordersStatus WHERE ordersNumber = :ordersNumber";
$statement = $db->prepare($query);
$statement->execute(['ordersStatus' => 2, 'ordersNumber' => $post['merchant_oid']]);
$merchant_oid = $post['merchant_oid'];
// ÜRÜN ÇEKME
$productID = $post['ordersProductID']; // Veriyi çek
$accountSQL = $db->prepare("SELECT accountID FROM account WHERE accountProductID = :accountProductID AND accountStatus = 1 LIMIT 1");
$accountSQL->execute(['accountProductID' => $productID]);
$accountDetail = $accountSQL->fetch(PDO::FETCH_ASSOC);
// Eğer ilgili kullanıcı bulunursa
if ($accountDetail) {
$accountId = $accountDetail['accountID'];
// account status update
$query1 = "UPDATE account SET accountStatus = 2, accountOrdersId=:accountOrdersId WHERE accountID = :accountID ";
$statement1 = $db->prepare($query1);
$success = $statement1->execute(['accountOrdersId' => $merchant_oid, 'accountID' => $accountId]);
if ($success) {
$query2 = "UPDATE orders SET ordersStatus = :ordersStatus WHERE ordersNumber = :ordersNumber";
$statement2 = $db->prepare($query2);
$statement2->execute(['ordersStatus' => 2, 'ordersNumber' => $merchant_oid]);
} else {
// Handle update failure
}
}Bu düzeltmelerle, kodunuzun beklenen şekilde çalışması gerektiğini umuyorum.