विभिन्न कारणों से एक क्वेरी विफल हो सकती है जिस स्थिति में mysql_* और mysqli एक्सटेंशन दोनों false
वापस आ जाएंगे उनके संबंधित क्वेरी फ़ंक्शंस/विधियों से। आपको उस त्रुटि स्थिति के लिए परीक्षण करने और उसके अनुसार इसे संभालने की आवश्यकता है।
नोट द और php संस्करण 7. में हटा दिया गया है।
$result
जांचें इसे mysql_fetch_array
. पर भेजने से पहले . आप पाएंगे कि यह false
है क्योंकि क्वेरी विफल रही। देखें mysql_query
संभावित वापसी मूल्यों के लिए दस्तावेज़ीकरण और उनसे निपटने के तरीके के लिए सुझाव।
$username = mysql_real_escape_string($_POST['username']);
$password = $_POST['password'];
$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '$username'");
if($result === FALSE) {
die(mysql_error()); // TODO: better error handling
}
while($row = mysql_fetch_array($result))
{
echo $row['FirstName'];
}
mysqli एक्सटेंशन
प्रक्रियात्मक शैली :
$username = mysqli_real_escape_string($mysqli, $_POST['username']);
$result = mysqli_query($mysqli, "SELECT * FROM Users WHERE UserName LIKE '$username'");
// mysqli_query returns false if something went wrong with the query
if($result === FALSE) {
yourErrorHandler(mysqli_error($mysqli));
}
else {
// as of php 5.4 mysqli_result implements Traversable, so you can use it with foreach
foreach( $result as $row ) {
...
ऊ-शैली :
$username = $mysqli->escape_string($_POST['username']);
$result = $mysqli->query("SELECT * FROM Users WHERE UserName LIKE '$username'");
if($result === FALSE) {
yourErrorHandler($mysqli->error); // or $mysqli->error_list
}
else {
// as of php 5.4 mysqli_result implements Traversable, so you can use it with foreach
foreach( $result as $row ) {
...
तैयार किए गए कथन का उपयोग करना:
$stmt = $mysqli->prepare('SELECT * FROM Users WHERE UserName LIKE ?');
if ( !$stmt ) {
yourErrorHandler($mysqli->error); // or $mysqli->error_list
}
else if ( !$stmt->bind_param('s', $_POST['username']) ) {
yourErrorHandler($stmt->error); // or $stmt->error_list
}
else if ( !$stmt->execute() ) {
yourErrorHandler($stmt->error); // or $stmt->error_list
}
else {
$result = $stmt->get_result();
// as of php 5.4 mysqli_result implements Traversable, so you can use it with foreach
foreach( $result as $row ) {
...
ये उदाहरण केवल बताते हैं क्या किया जाना चाहिए (त्रुटि प्रबंधन), यह कैसे करना नहीं है। प्रोडक्शन कोड में or die
का इस्तेमाल नहीं होना चाहिए
HTML को आउटपुट करते समय, अन्यथा यह (कम से कम) अमान्य HTML उत्पन्न करेगा। साथ ही, डेटाबेस त्रुटि संदेशों को गैर-व्यवस्थापक उपयोगकर्ताओं को प्रदर्शित नहीं किया जाना चाहिए, क्योंकि यह बहुत अधिक जानकारी प्रकट करता है
।