नोट: mysql_
. से कनवर्ट किया जा रहा है से mysqli_
इष्टतम नहीं हो सकता है। पीडीओ पर विचार करें
अगर आप अपने सभी कोड को OOP
में बदलने के लिए तैयार हैं ।
mysql_
. के सभी उदाहरणों को बदलने का प्रयास करना आकर्षक हो सकता है mysqli_
. के साथ और प्रार्थना करो यह काम करता है। आप करीब होंगे लेकिन काफी हद तक नहीं।
डेटाबेस से कनेक्ट करना:
सौभाग्य से, mysqli_connect
mysql_query
. के काफी करीब से काम करता है कि आप उनके फ़ंक्शन नामों की अदला-बदली कर सकते हैं।
mysql_:
$con = mysql_connect($host, $username, $password);
mysqli_:
$con = mysqli_connect($host, $username, $password);
डेटाबेस का चयन करना
अब, अधिकांश अन्य कार्यों के साथ mysqli_
पुस्तकालय, आपको पास करने की आवश्यकता होगी mysqli_select_db
डेटाबेस कनेक्शन इसके पहले . के रूप में पैरामीटर। अधिकांश mysqli_
फ़ंक्शंस को पहले कनेक्शन ऑब्जेक्ट की आवश्यकता होती है।
इस फ़ंक्शन के लिए, आप केवल उन तर्कों के क्रम को स्विच कर सकते हैं जिन्हें आप फ़ंक्शन में पास करते हैं। यदि आपने इसे पहले कनेक्शन ऑब्जेक्ट पास नहीं किया था, तो आपको इसे अब पहले पैरामीटर के रूप में जोड़ना होगा।
mysql_:
mysql_select_db($dbname, $con);
mysqli_:
mysqli_select_db($con, $dbname);
एक बोनस के रूप में, आप डेटाबेस नाम को चौथे पैरामीटर के रूप में mysqli_connect
. पर पास कर सकते हैं - कॉल करने की आवश्यकता को दरकिनार करते हुए mysqli_select_db
।
$con = mysqli_connect($host, $username, $password, $dbname);
उपयोगकर्ता इनपुट को स्वच्छ करें
mysqli_real_escape_string
का उपयोग करना mysql_real_escape_string
. से बहुत मिलता-जुलता है . आपको कनेक्शन ऑब्जेक्ट को पहले पैरामीटर के रूप में पास करने की आवश्यकता है।
mysql_:
$value1 = mysql_real_escape_string($input_string);
mysqli_:
$value1 = mysqli_real_escape_string($con, $input_string);
बहुत महत्वपूर्ण:प्रश्न तैयार करना और चलाना
एक कारण mysql_
तैयार किए गए बयानों को संभालने में उनकी अक्षमता के साथ शुरू करने के लिए कार्यों को बहिष्कृत कर दिया गया था। अगर आप बस अपने कोड को mysqli_
. में बदलते हैं यह महत्वपूर्ण कदम उठाए बिना, आप mysql_
. की कुछ सबसे बड़ी कमजोरियों के अधीन हैं कार्य।
तैयार किए गए बयानों और उनके लाभों पर इन लेखों को पढ़ने लायक है:
नोट:तैयार कथनों का उपयोग करते समय, *
का उपयोग करने के बजाय, प्रत्येक कॉलम को स्पष्ट रूप से सूचीबद्ध करना सबसे अच्छा है जिसे आप क्वेरी करने का प्रयास कर रहे हैं। सभी स्तंभों को क्वेरी करने के लिए संकेतन। इस तरह आप सुनिश्चित कर सकते हैं कि आपने mysqli_stmt_bind_result
पर अपनी कॉल के सभी कॉलमों का हिसाब कर लिया है .
mysql_:
$query = 'SELECT * FROM table1 WHERE table1.col1=' . $value1 . '';
$result = mysql_query($query, $con);
while($row = mysql_fetch_assoc*$result)
{
$col1 = $row['col1'];
$col2 = $row['col2'];
echo $col1 . ' ' . $col2 . '<br />';
}
mysqli_:
$query = 'SELECT col1,col2 FROM table1 WHERE table1.col1=?';
if ($stmt = mysqli_prepare($link, $query)) {
/* pass parameters to query */
mysqli_stmt_bind_param($stmt, "s", $value1);
/* run the query on the database */
mysqli_stmt_execute($stmt);
/* assign variable for each column to store results in */
mysqli_stmt_bind_result($stmt, $col1, $col2);
/* fetch values */
while (mysqli_stmt_fetch($stmt)) {
/*
on each fetch, the values for each column
in the results are automatically stored in
the variables we assigned using
"mysqli_stmt_bind_result"
*/
echo $col1 . ' ' . $col2 . '<br />';
}
/* close statement */
mysqli_stmt_close($stmt);
}
त्रुटियां दिखाई जा रही हैं
mysqli_
. के साथ त्रुटियां दिखाना थोड़ा अलग तरीके से काम करता है . mysqli_error
कनेक्शन ऑब्जेक्ट को इसके पहले पैरामीटर के रूप में आवश्यक है। लेकिन क्या होगा अगर कनेक्शन विफल हो गया? mysqli_
उन कार्यों का एक छोटा सा सेट प्रस्तुत करता है जिन्हें कनेक्शन ऑब्जेक्ट की आवश्यकता नहीं होती है:mysqli_connect_*
कार्य।
mysql_:
if (!$con) {
die('Could not connect: ' . mysql_error());
}
if (!$result) {
die('SQL Error: ' . mysql_error());
}
mysqli_:
/* check connection error*/
if (mysqli_connect_errno()) {
die( 'Could not connect: ' . mysqli_connect_error() );
}
/* check query error */
if ($stmt = mysqli_prepare($link, $query)) {
// ... execute query
if (mysqli_stmt_error($stmt)) {
echo 'SQL Error: ' . mysqli_stmt_error($stmt);
}
}