Bazen MySQLi kodunuz mysqli_fetch_assoc() expects parameter...
, Call to a member function bind_param()...
veya benzeri bir hata üretir . Ya da hatasız olsa bile, sorgu aynı şekilde çalışmaz. Bu, sorgunuzun yürütülemediği anlamına gelir.
Bir sorgu her başarısız olduğunda, MySQL'in nedenini açıklayan bir hata mesajı vardır . Ne yazık ki, bu tür hatalar varsayılan olarak PHP'ye aktarılmaz ve sahip olduğunuz tek şey yukarıda bahsedilen şifreli bir hata mesajıdır. Bu nedenle, MySQL hatalarını size bildirmek için PHP ve MySQLi'yi yapılandırmak çok önemlidir. Hata mesajını aldığınızda, düzeltmek çocuk oyuncağı olacaktır.
MySQLi'de hata mesajı nasıl alınır?
Her şeyden önce, tüm ortamlarınızda MySQLi bağlanmadan önce her zaman bu satıra sahip olun:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
Bundan sonra tüm MySQL hataları PHP istisnalarına aktarılacaktır. Yakalanmamış istisna, sırayla, PHP ölümcül hatası yapar. Bu nedenle, bir MySQL hatası durumunda, geleneksel bir PHP hatası alırsınız. Bu, anında hata nedeninin farkına varmanızı sağlayacaktır. Ve bir yığın izleme, sizi hatanın meydana geldiği tam noktaya götürecektir.
PHP'yi farklı ortamlarda yapılandırma
İşte PHP hata raporlama hakkındaki makalemin özü :
Bir geliştirme ve canlı sunuculardaki hataları bildirmek farklı olmalıdır. Bir geliştirme sunucusunda hataların ekranda gösterilmesi uygundur, ancak bunun yerine canlı bir sunucuda hata mesajlarının günlüğe kaydedilmesi gerekir, böylece bunları daha sonra hata günlüğünde bulabilirsiniz.
Bu nedenle, ilgili yapılandırma seçeneklerini aşağıdaki değerlere ayarlamalısınız:
Aslında nasıl kullanılır?
Sadece herhangi kodunu kaldırmanızı elle hata olup olmadığını kontrol eder , tüm bu or die()
, if ($result)
ve bu tür. Veritabanı etkileşim kodunuzu hemen yazın:
$stmt = $this->con->prepare("INSERT INTO table(name, quantity) VALUES (?,?)");
$stmt->bind_param("si", $name, $quantity);
$stmt->execute();
yine, etrafta herhangi bir koşul olmadan . Bir hata oluşursa, kodunuzdaki diğer herhangi bir hata olarak değerlendirilecektir. Örneğin, bir geliştirme bilgisayarında sadece ekranda görünecektir, canlı bir sitede ise bir programcı için oturum açılacaktır, oysa kullanıcının rahatlığı için bir hata işleyicisi kullanabilirsiniz (ancak bu konu dışı olan farklı bir hikaye MySQLi, ancak yukarıda bağlantısı verilen makalede okuyabilirsiniz).
Aldığınız hata mesajıyla ne yapmalısınız?
Öncelikle sorunlu sorguyu bulmanız gerekir. Hata mesajı , hatanın meydana geldiği tam noktanın dosya adını ve satır numarasını içerir. Yeterli basit kod için, ancak kodunuz işlevler veya sınıflar kullanıyorsa , sorun sorgusunu bulmak için yığın izlemeyi izlemeniz gerekebilir .
Hata mesajını aldıktan sonra onu okuyup anlamanız gerekir. Küçümseyici değilse de kulağa çok açık geliyor, ancak öğrenciler genellikle hata mesajının sadece bir alarm sinyali olmadığı, aslında sorunun ayrıntılı bir açıklamasını içerdiği gerçeğini gözden kaçırıyorlar . Ve ihtiyacınız olan tek şey hata mesajını okumak ve sorunu düzeltmektir.
- Diyelim ki, belirli bir tablonun olmadığını söylüyorsa, yazımı, yazım hatalarını ve harf durumunu kontrol etmelisiniz. Ayrıca PHP betiğinizin doğru bir veritabanına bağlandığından emin olmalısınız.
- Veya SQL sözdiziminde bir hata olduğunu söylüyorsa, SQL'inizi incelemelisiniz. Ve sorun nokta haklı önce sorgu parçası hata iletisinde gösterdi.
Hata mesajını anlamıyorsanız, Google'ı deneyin. Ve sonuçlara göz atarken , çözümü açıkça vermek yerine hatayı açıklayan yanıtlara bağlı kalın. Sizin durumunuzda bir çözüm işe yaramayabilir ancak açıklama, sorunu anlamanıza ve sorunu kendi başınıza çözmenize yardımcı olacaktır.
Ayrıca hata mesajına da güvenmelisiniz . O jeton sayısını bağlı değişkenlerin sayısını eşleşmiyor diyorsa o zaman olduğunu bu yüzden. Aynı şey eksik tablolar veya sütunlar için de geçerlidir. İster kendi hatanız olsun, ister hata mesajı yanlış olsun, her zaman öncekine bağlı kalın. Kulağa küçümseyici geliyor, ancak bu sitedeki yüzlerce soru bunun son derece yararlı olduğunu kanıtlıyor.
Hata raporlama konusunda asla yapmamanız gereken şeylerin bir listesi
- Asla bir hata bastırma operatörü (
@
) kullanmayın! Bir programcının hata mesajını okuyamamasına ve bu nedenle hatayı düzeltememesine neden olur
- Kullanmayın
die()
veya echo
koşulsuz ekranda hata mesajı yazdırmak veya başka bir fonksiyonu. PHP hataları kendi kendine rapor edebilir ve bunu ortama bağlı olarak doğru şekilde yapabilir - bu yüzden onu PHP'ye bırakın.
- Sorgu sonucunu manuel olarak test etmek için bir koşul eklemeyin (gibi
if($result)
). Hata istisnaları etkinleştirildiğinde, bu tür bir durum işe yaramaz.
try..catch
Hata mesajını tekrarlamak için operatörü kullanmayın . Bu operatör, işlem geri alma gibi bazı hata işlemlerini gerçekleştirmek için kullanılmalıdır. Ancak bunu asla hataları bildirmek için kullanmayın - yukarıda öğrendiğimiz gibi, PHP bunu zaten doğru şekilde yapabilir.
Not:
Bazen hata yok ama sonuç da yok. O zaman , veritabanında kriterlerinize uyan hiçbir veri olmadığı anlamına gelir . Bu durumda, verilere ve kriterlere yemin etseniz bile, bu gerçeği kabul etmelisiniz. Onlar değil. Tekrar kontrol etmelisiniz. Bu konuda yardımcı olabilecek bir makalem var, Veritabanı etkileşimlerinde hata ayıklama . PDO için yazılmış olmasına rağmen, prensip aynıdır. Bu talimatı adım adım izleyin ve sorununuzu çözdürün veya Stack Overflow için yanıtlanabilir bir soru sorun.
$mysqli
Değişkeni nerede başlattığınızı görebilir miyiz ?