PDO tarafından hazırlanmış ifadeleri kullanarak bir MySQL veritabanında sorgu için uygun hata işleme oluşturmaya çalışıyorum. Programın o andan çıkmasını istiyorum, hazırlanan deyimdeki bir hata tespit edildi. checkSuccess()
aşağıdakileri yaparak birliktePDO Hazırlanan Deyimler için Hata Denetimi
global $allFields;
global $db;
global $app;
//dynamically append all relevant fields to query using $allFields global
$selectQuery = 'SELECT ' . implode($allFields, ', ') .
' FROM People WHERE ' . $fieldName . ' = :value';
//prepared statement -- returns boolean false if failure running query; run success check
$success = $selectQueryResult = $db->prepare($selectQuery);
checkSuccess($success);
$success = $selectQueryResult->bindParam(':value', $fieldValue, PDO::PARAM_STR);
checkSuccess($success);
$success = $selectQueryResult->execute();
checkSuccess($success);
: PDO hazırlanan deyimi sürecinde her adımı başarısızlık üzerine False
döndürür aslında yararlanarak, birlikte bu iğrenç kesmek attı
function checkSuccess($success) {
if ($success == false) {
//TODO: custom error page.
echo "Error connecting to database with this query.";
die();
}
}
iki şey. İlk olarak, bu korkunç derecede ve aptalca. Daha iyi bir yol olmalı. Açıkçası boole'ları bir dizide veya bir kod veya bir kod 2 çıkarmak için bir şey saklayabilirim, ama yine de.
İkincisi, bu değerleri kontrol bile gerekir, yoksa bu kod satırı gerçekleştirildikten sonra ben sadece sonucu kontrol etmelisiniz:
if ($result) { //test if query generated results
// do successful shit
}
else {
echo "404";
$app->response()->status(404); //create 404 response header if no results
:
$result = $selectQueryResult->fetch(PDO::FETCH_ASSOC);
Zaten bunu yapar koduna sahip
Hazırlanan deyim sürecini tuhaf, eşleşmeyen veya uzun sorguları ekleyerek kırmaya çalıştığım zaman, programım false
'u checkSuccess()
çalıştırdığım işlevlerden hiçbirine dönmeden $result
atamasına her zaman yapar. Yani belki yukarıdaki mantığı kontrol etmem gerekmiyor mu? Programda daha önce başarılı bir veritabanı bağlantısı olup olmadığını kontrol etmeyi unutmayın.
[azarı] DO NT USE 'global's [/ scolding] Bunu kontrol edin - http://stackoverflow.com/questions/1557787/are-global-variables-in-php-considered-bad-practice-if-so-why – ShuklaSannidhya