मैं पीडीओ का उपयोग कर एक MySQL डेटाबेस पर प्रश्नों के लिए से निपटने के उचित त्रुटि बनाने के लिए कोशिश कर रहा हूँ के लिए जांच की जा रही करने में त्रुटि। मैं चाहता हूं कि इस कार्यक्रम से बाहर निकलने के लिए तैयार कथन प्रक्रिया में एक त्रुटि का पता चल जाए। checkSuccess()
निम्न कार्य के साथपीडीओ तैयार वक्तव्य
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);
: तथ्य यह है कि पीडीओ तैयार बयान प्रक्रिया के प्रत्येक चरण रिटर्न False
विफलता पर का लाभ उठाते हुए, मैं एक साथ इस प्रतिकूल हैक फेंक दिया
function checkSuccess($success) {
if ($success == false) {
//TODO: custom error page.
echo "Error connecting to database with this query.";
die();
}
}
दो बातें। सबसे पहले, यह बहुत verbose और बेवकूफ है। इसके लिए अवश्य ही एक बेहतर तरीका होना चाहिए। ' जाहिर है मैं एक पंक्ति या कोड के 2, लेकिन अभी भी बाहर निकालने के लिए एक सरणी या कुछ में बूलियन्स संग्रहीत कर सकती है।
दूसरा, यह भी इन मूल्यों को जांच करने के लिए आवश्यक है, या मैं सिर्फ परिणाम की जाँच करनी चाहिए के बाद मैं कोड की इस पंक्ति प्रदर्शन:
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);
मैं पहले से ही है कि इस करता है कोड है
जितना मैं अजीब, बेमेल या लम्बे प्रश्नों को डालने के द्वारा तैयार कथन प्रक्रिया को तोड़ने की कोशिश करता हूं, मेरा प्रोग्राम हमेशा $result
असाइनमेंट को false
पर वापस किए बिना किसी भी फ़ंक्शन पर checkSuccess()
चलाता है। तो शायद मुझे उपर्युक्त तर्क की जांच करने की आवश्यकता नहीं है? ध्यान रखें कि मैं प्रोग्राम में पहले एक सफल डेटाबेस कनेक्शन की जांच करता हूं।
[scolding] DO NT उपयोग 'global's [/ डांट] इस की जाँच करें - http://stackoverflow.com/questions/1557787/are-global-variables-in-php-considered-bad-practice-if-so-why – ShuklaSannidhya