PHP bir SQL sorgusu test

4 Cevap php

Ben çağrıldığında, bir veritabanından ilgili bir makale silecektir aşağıdaki basit php kod pasajı var. Sonuç AJAX sayfayı güncelleştirmek bir javacsript fonksiyonu geçirilir. Ben sorgu başarısız olursa aşağıda ettik olarak, false dizesini dönmek istiyorum.

if($cmd=="deleterec"){
$deleteQuery = "DELETE FROM AUCTIONS1 WHERE ARTICLE_NO = ?";
if ($delRecord = $con->prepare($deleteQuery)) {
    $delRecord->bind_param("s", $pk);
    $delRecord->execute();
    $delRecord->close();
    echo "true";
} else {
echo "false";
}
}

Ben cevapsız ve bir sorgu başarılı veya başarısız olup olmadığını kontrol etmek için doğru yolu ne bilmek istiyorum.

Edit:

Cevabına dayanarak, ben hareketli denedim eğer $delRecord->execute(); yerine hazırlamak, ama yapılan hiçbir fark t fıkra. false dönmek için ben sayfayı alınamıyor.

Sorgu zaman bile yanlış, yürütür ve dolayısıyla her zaman 'gerçek' döndürür, çünkü aşağıda çözümler işe yaramaz. Ben etkilenen satırlar yöntemi denerseniz ben error : Call to undefined method mysqli_stmt::affected_rows() olsun

4 Cevap

Sen Sorgu başarılı olup olmadığını kontrol etmek için mysqli->affected_rows() kullanmak için (veya mysqli_stmt->execute() 's sonuç değerini kullanabilirsiniz) gerekir.

Sizi örnek alarak ve yukarıdaki için hiçbir şey ama değiştirerek:

if($cmd=="deleterec") {
    $deleteQuery = "DELETE FROM AUCTIONS1 WHERE ARTICLE_NO = ?";

    if ($delRecord = $con->prepare($deleteQuery)) {
        $delRecord->bind_param("s", $pk);
        $delRecord->execute();


        if ($delRecord->affected_rows() > 0) {
            echo "true";
        } else {
            echo "false";
        }

        $delRecord->close();
    }
}

Şu anda sadece aslında kayıt silinmiş olup olmadığını kontrol değil, SQL deyimi doğru hazır olup olmadığı kontrol ediyoruz.

Deneyin:

...
echo ($delRecord->affected_rows() > 0) ? 'true' : 'false';
$delRecord->close();

Yani doğru JavaScript kod sonuç dizesini kontrol ediyoruz olmadığına ilişkin değildir - bu bir sorun ise biz daha fazla bilgi gerekir.

if($cmd=="deleterec"){
    $deleteQuery = "DELETE FROM AUCTIONS1 WHERE ARTICLE_NO = ?";
    $delRecord = $con->prepare($deleteQuery);
    if ( $delRecord === false ) {
        echo "false";
    }

    $delRecord->bind_param("s", $pk);
    if ( $delRecord->execute() ) {
        echo "true";
    } else {
        echo "false";
    }
    $delRecord->close();
}

prepare() sorgu sabit olduğundan sol olabilir ve (sunucu tarafında bir hata olmadığı sürece) çalışma olmalıdır denetleniyor. Sorgu başarılı idam olsaydı execute(), true döndürür. Belki silmek için hiçbir madde yoktu çünkü affected_rows() yanıltıcı olabilir ve bu nedenle affected_rows() return whould kullanarak 0. Sorgunun Nontheless başarıyla idam edildi.