PHP MySQL Insert – Select – Query

Retrieving Query Results from MySQL Database

पिछले उदाहरण में हमने देखा कि किस तरह से हम किसी MySQL Database के साथ Connection Establish करके किसी HTML Form से आने वाले Data को Database में Insert कर सकते हैं।

ठीक इसी तरह से हम किसी Database में Stored Data को Alter, Update व Delete भी कर सकते हैं। किसी Record को Insert, Update, Alter या Delete करते समय SQL Query किसी तरह का कोई Output Return नहीं करता। लेकिन जब हम किसी Database से किसी Result को Return करना चाहते हैं, तब हमें PHP द्वारा Provided अन्य Functions को Use करना होता है।

किसी SELECT Query द्वारा Return होने वाले Result को Retrieve करने के लिए हम PHP के mysqli_fetch_array() Function को Use कर सकते हैं। ये Function SELECT Query से Return होने वाले Result को एक Array के रूप में Return करता है। ये Array एक बार में केवल एक Record को Return करता है और Record के सभी Fields Array के विभिन्न Index Number पर Available रहते हैं जिन्हें Looping Statement का प्रयोग करके Access व Manipulate किया जा सकता है। इस Function को हम निम्नानुसार while Loop के साथ Use कर सकते हैं:

while($record = mysqli_fetch_array($result))
// Access each field of the return record
}

mysqli_fetch_array() Function दूसरे Parameter के रूप में एक Optional Argument Accept करता है। इस दूसरे Argument के रूप में हम निम्न में से किसी एक Constant मान को Specify कर सकते हैं:

MYSQLI_ASSOC Constant

जब हम दूसरे Parameter के रूप में इस मान को Specify करते हैं, तो Return होने वाला Record एक Associative Array के रूप में Return होता है। Associative Array एक ऐसा Array होता है, जिसके द्वारा हम किसी Table के Records के विभिन्न Fields को उसकी Table के Column के नाम से Access कर सकते हैं। जैसेः

while($record = mysqli_fetch_array($result, MYSQLI_ASSOC)){
echo $record[‘username’];
}

MYSQLI_NUM Constant

जब हम दूसरे Parameter के रूप में इस मान को Specify करते हैं, तो Return होने वाला Record एक Indexed Array के रूप में Return होता है। एक Indexed Array के रूम में Returned Record के विभिन्न Fields को Access करने के लिए हम Array के साथ Index Number का प्रयोग करते हैं, जहां पहला Index Number यानी Index Number 0, Return होने वाले Record के पहले Column को Represent करता है। जैसेः

while($record = mysqli_fetch_array($result, MYSQLI_NUM)){
echo $record[0];
}

MYSQLI_BOTH Constant

जब हम दूसरे Parameter के रूप में इस मान को Specify करते हैं, तो Return होने वाले Record को हम Associative Array व Indexed Array दोनों तरीकों से उपयोग में ले सकते हैं। जैसेः

	while($record = mysqli_fetch_array($result, MYSQLI_BOTH)){
		echo $record['username'];
		echo $record[0];
	}

MYSQLI_NUM की Speed MYSQLI_ASSOC की तुलना में तेज होती है, लेकिन MYSQLI_ASSOC का प्रयोग करने पर SQL Query को Change करने की स्थिति में भी PHP Script के अन्य किसी Code को Modify करने की जरूरत नहीं रहती, जबकि MYSQLI_NUM को Use करने पर हमें इस बात का ध्यान रखना जरूरी होता है कि SQL Query को Change या Modify करने पर भी Return होने वाले Result में कौनसा Column पहले Specify किया गया है और कौनसा बाद में।

उदाहरण के लिए यदि हम Username, EmailPassword को SELECT करते हैं, तो username Index Number 0 पर email Index Number 1 पर व password Index Number 2 पर होता है। अब यदि हम SELECT Query को Modify करके Username, Password व Email के क्रम में Select करें, तो username Index Number 0 पर email Index Number 2 पर व password Index Number 1 पर प्राप्त होगा। इसलिए जब हम MYSQLI_NUM Constant को Use करते हैं, तो Query को Modify करते समय हमें इस बात को ध्यान में रखना जरूरी होता है।

पिछले उदाहरण में हमने phpMyAdmin Panel द्वारा सभी Subscribers की List को देखा था। बार-बार phpMyAdmin Panel में जाकर सभी Registered User की जानकारी प्राप्त करने से बेहतर ये है कि हम एक PHP Script Create करें, जो कि सभी Registered Users की विभिन्न Information को एक Web Page के रूप में Display कर दे। इस जरूरत को पूरा करने के लिए हम निम्नानुसार एक PHP Script Create कर सकते हैं:

<?php
	$title = "All Subscribers";
	include_once('header.php');

	include_once('db_info.php');
	$q = "SELECT * FROM subscribers";
	$result = @mysqli_query($db_conn, $q);
	
	if($result) {
		echo '<table align="center" cellspacing="3" width="100%" border="1">
			<tr>
				<td><b>User Name</b></td>
				<td><b>EMail</b></td>
				<td><b>Date</b></td>
				<td><b>Confirmed</b></td>
			</tr>';
			
		while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
			echo '<tr><td>' . $row['username'] . '</td>
				<td>' . $row['email'] . '</td>
				<td>' . $row['regtime'] . '</td>
				<td>' . $row['confirmed'] . '</td>
				</tr>';
		}
		echo '</table>'; // Close the table.
		
		} 
		else { // If it did not run OK.
			echo '<p class="error">The current users could not be retrieved.</p>';
		
		// Debugging message:
		echo '<p>' . mysqli_error($db_conn) . '<br/><br />Query: ' . $q . '</p>';
	} // End of if ($r) IF.

	include_once('footer.php'); 
?>

इस PHP Script में सबसे पहले निम्न Code द्वारा PHP व MySql के बीच Connection Establish किया जाता हैः

include_once(‘db_info.php’);

फिर निम्न Code द्वारा एक SELECT Query String Create किया जाता है, जो कि Database से सभी Subscribers की सारी Information को Return करता हैः

$q = “SELECT * FROM subscribers”;

फिर उपरोक्त Query को निम्नानुसार Database पर Fire किया जाता है, जिससे सभी Subscribers की Information $results नाम के एक Associative Array में प्राप्त हो जाती हैः

$result = @mysqli_query($db_conn, $q);

चूंकि $result में Database से सभी Records एक ही बार में Store हो जाते हैं, इसलिए $result से हर Record को एक-एक करके Access करना होता है। परिणामस्वरूप हमें एक while Loop की जरूरत पडती है, जो कि निम्नानुसार होता हैः

		while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
			echo '<tr><td>' . $row['username'] . '</td>
				<td>' . $row['email'] . '</td>
				<td>' . $row['regtime'] . '</td>
				<td>' . $row['confirmed'] . '</td>
				</tr>';
		}

इस While Loop में mysqli_fetch_array() Function द्वारा $result में Stored सभी Records को One by One एक Array के रूप में Return किया जाता है। इस Return होने वाले Array में एक एक बार में एक ही Record होता है और Array का हर Element Record के एक Field को Represent करता है।

ये Loop तब तक चलता रहता है, जब तक कि $result का अन्तिम Record Access नहीं हो जाता और हर Iteration में Array के हर Field की Information को एक HTML Table के Data Element के रूप में Render किया जाता है। इस तरह से जब हम इस Script को Execute करते हैं, तो हमें निम्नानुसार Output प्राप्त होता हैः

PHP MySQL Insert - Select - Query - Hindi

Database Security

जब हम किसी Database को PHP के साथ Use करते हैं, तो Database के Data की Security को भी हमें ही Handle करना होता है। PHP के साथ Database को Use करते समय मूल रूप से हमें तीन बातों को ध्यान में रखना जरूरी होता हैः

  • MySQL Database की Login Related Information जैसे कि Username, Password, Database Name व Host की जानकारी की सुरक्षा को Manage करना होता है, ताकि कोई भी Unauthorized User Actual Database के साथ किसी तरह की प्रक्रिया न कर सके।
  • Database के बारे में जहां तक हो कम से कम जानकारी User को मिलनी चाहिए, ताकि Malicious Uses से Database सुरक्षित रहे। और

Database पर Fire की जाने वाली Queries को पूरी तरह से Verify करने के बाद ही Fire किया जाना चाहिए, ताकि User Frontend Form द्वारा किसी भी तरह से Database Access Queries को Modify करके Database के Data को नुकसान न पहुंचा सके।

पहली जरूरत को पूरा करने के लिए सामान्यतः हम Database Connection की एक अलग File Create करते हैं और उसे Web Directory के Public Location के बजाय Root या Home में Save करते हैं, जिस पर Web Browser द्वारा Directly नहीं पहुंचा जा सकता।

दूसरी जरूरत को पूरा करने के लिए @ व अन्य Error Handling Techniques को Use करते हैं, जिससे Error की स्थिति में भी User को Database से संबंधित कम से कम जानकारी प्राप्त होती है।

तीसरी जरूरत को पूरा करने के लिए हमें कई Steps Follow करने पडते हैं और PHP हमें विभिन्न प्रकार के अन्य Functions भी Provide करता है, जिनको Use करके हम एक End User को Database के साथ कम से कम Access करने की सुविधा देते हैं।

इस Section में हम सबसे पहले User द्वारा Fill किए गए Form के Data को Regular Expressions आदि का प्रयोग करके ये तय करते हैं कि User ने वही Data Input किया है, जो कि उसे करना चाहिए। यदि User सामान्य Data के अलावा कोई अन्य Data Input करता है, तो उसे Reject किया जाना होता है, ताकि User किसी भी तरह से Database को नुकसान न पहुंचा सके।

PHP हमें mysqli_real_escape_string() नाम का एक Function भी Provide करता है, जिसका प्रयोग हम हमारे Form के हर Text Field Data की Value के साथ करके इस बात को Ensure कर सकते हैं कि यदि User ने किसी Special Character को Input Field में Input किया हो, तो उसे Escape कर दिया जाए, ताकि उस Special Character का कोई Side Effect Actual Database पर न पडे। यदि हम हमारे पिछले PHP Program में इसे Use करना चाहें, तो हमारा Modified PHP Script निम्नानुसार होगाः

<?php
	$title = "Subscription: MySQL with PHP";
	include_once('header.php');
	include_once('db_info.php'); // Connect to the db.
	$errors = array(); // Initialize an error array.
		
	// Check for a username:
	if (empty($_POST['username'])) {
		$errors[] = 'You forgot to enter your username.';
	} 
	else {
		$username = mysqli_real_escape_string($db_conn, trim($_POST['username']));
	}
		
	// Check for an email address:
	if (empty($_POST['email'])) {
		$errors[] = 'You forgot to enter your email address.';
	} 
	else {
		$email = mysqli_real_escape_string($db_conn, trim($_POST['email']));
	}

	// Check for a password and match against the confirmed password:
	if (!empty($_POST['password'])) {
		if ($_POST['password'] != $_POST['repassword']) {
			$errors[] = 'Your password did not match the confirmed password.';
		} 
		else {
			$password = mysqli_real_escape_string($db_conn, trim($_POST['password']));
		}
	} 
	else {
		$errors[] = 'You forgot to enter your password.';
	}
		
	if (empty($errors)) { // If everything's OK.
		// Register the user in the database...
		
		// Make the query:
		$q = "INSERT INTO subscribers (username, email, pwd) 
			   VALUES ('$username', '$email', SHA1('$password'))";
		$result = mysqli_query ($db_conn, $q); // Run the query.
		if ($result) { // If it ran OK. Print a message:
			echo '<h1>Thank you!</h1><p>You are now registered. </p><br /></p>';
		} 
		else { // If it did not run OK. Public message:
			echo '<h1>System Error</h1>'; // Debugging message:
			echo '<p>' . mysqli_error($db_conn) . '<br /><br />Query: ' . $q . '</p>';
		} // End of if ($r) IF.

		mysqli_close($db_conn); // Close the database connection.
		exit(1);
	} 
	else { // Report the errors.
		echo '<h1>Error!</h1><p class="error">The following error(s) occurred:<br />';
		foreach ($errors as $msg) { // Print each error.
			echo " - $msg<br />\n";
		}
		echo '</p><p>Please try again.</p><p><br /></p>';
	} // End of if (empty($errors)) IF.
?>
	
	<p class="error">You could not be registered due to a system error.</p>

<?php
	include_once('footer.php'); 
?>

mysqli_num_rows() Function

इस Function का प्रयोग करके हम इस बात का पता लगा सकते हैं कि किसी Resultset में कुल कितने Records Available हैं। इस Function को हम निम्नानुसार Use कर सकते हैं:

$num = mysqli_num_rows($result);

इस Function को हम हमारी पिछली Script में Use करके कुल Registered Users की संख्‍या को भी Display कर सकते हैं। जैसेः

PHP MySQL Insert - Select - Query - Hindi
<?php
	$title = "All Subscribers";
	include_once('header.php');
	include_once('db_info.php');
	
	$q = "SELECT * FROM subscribers";
	$result = @mysqli_query($db_conn, $q);
	echo "<h1>Total Subscribers : " . mysqli_num_rows($result) . "</h1>";

	if($result) {
		echo '<table align="center" cellspacing="3" width="100%" border="1">
			<tr>
				<td align="left"><b>User Name</b></td>
				<td align="left"><b>EMail</b></td>
				<td align="left"><b>Date</b></td>
				<td align="left"><b>Confirmed</b></td>
			</tr>';
			
		while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
			echo '<tr><td align="left">' . $row['username'] . '</td>
				<td align="left">' . $row['email'] . '</td>
				<td align="left">' . $row['regtime'] . '</td>
				<td align="left">' . $row['confirmed'] . '</td>
				</tr>';
		}
		echo '</table>'; // Close the table.
		
		} 
		else { // If it did not run OK.
			echo '<p class="error">The current users could not be retrieved. </p>';
		
		// Debugging message:
		echo '<p>' . mysqli_error($db_conn) . '<br/><br />Query: ' . $q . '</p>';
	} // End of if ($r) IF.

	include_once('footer.php'); 
?>

Updating MySQL Records with PHP

mysqli_num_rows() Function SELECT Statement द्वारा Return होने वाले कुल Records की संख्‍या Return करता है, जबकि mysqli_affected_rows() Function किसी INSERT, UPDATE या DELETE SQL Query द्वारा Affect होने वाले कुल Records की संख्‍या Return करता है। इस Function को हम निम्नानुसार Use कर सकते हैः

$totalAffectedRows = mysqli_affected_rows($db_conn);

UPDATE Query की जरूरत हमें तब पडती है, जब किसी कारणवश User अपने Registration Information को Change करना चाहता है। उदाहरण के लिए यदि User अपने Password को Change करना चाहता है, तो Password Change करने के लिए उसे UPDATE Query को Fire करने की जरूरत पडेगी।

इसी तरह से यदि User अपने Registration Information को Delete करना चाहता है या हमारी Web Site से Unregister करना चाहता है, तो उस स्थिति में User के Record को Delete करने की जरूरत पड सकती है।

यानी यदि हम सारांश में कहें, तो हमें Database के साथ जिस किसी भी तरह का काम करना होता है, सभी कामों को करने के लिए हमें SQL Queries को Fire करना होता है और SQL Queries को Fire करने के लिए हमें हर बार निम्न काम करने होते हैं:

  • सबसे पहले mysqli_connect() Function का प्रयोग करके Database के साथ PHP का Connection बनाना।
  • यदि Connection बनाते समय Database को Specify न किया गया हो, तो mysqli_select_db() Function का प्रयोग करके उपयुक्त Database Select करना।
  • जिस जरूरत को पूरा करना है, उस जरूरत को पूरा करने से संबंधित SQL Query String Create करना।
  • Created SQL String को mysqli_query() Function का प्रयोग करके Database Connection पर SQL Query को Fire करना।
  • SQL Query के Fire होने से Generate होने वाले Results को mysqli_fetch_array(), mysqli_num_rows(), mysqli_affected_rows() आदि Functions का प्रयोग करते हुए Handle करना।
  • यदि Result Processing या Connection Establishing के समय किसी तरह की Error Trigger हो, तो उसे Handle करना। और

काम पूरा हो जाने के बाद Database Connection को Close करके Resources को Free करना। हालांकि यदि हम Resources को Manually Free नहीं करते, तो PHP ये काम स्वयं अपने स्तर पर करता है।

PHP in Hindiये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook PHP in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

PHP in Hindi | Page: 647 | Format: PDF

BUY NOW GET DEMO REVIEWS