पदावनत: mysql_connect ()


95

मुझे यह चेतावनी मिल रही है, लेकिन कार्यक्रम अभी भी सही ढंग से चलता है।

MySQL कोड मुझे PHP में एक संदेश दिखा रहा है:

पदावनत: mysql_connect (): mysql एक्सटेंशन को हटा दिया गया है और भविष्य में हटा दिया जाएगा: C: \ xampp \ htdocs \ task \ media \ new \ connect.inc.php के बजाय लाइन 2 पर mysqli या PDO का उपयोग करें

मेरा connect.inc.phpपेज है

<?php
  $connect = mysql_connect('localhost','root','');
  mysql_select_db('dbname');
?>

इसका क्या मतलब है और मैं संदेश को कैसे समाप्त कर सकता हूं?


5
Mysqli_ * फ़ंक्शन या PDO का उपयोग करें !!!!
कृष R

संभव डुप्लिकेट। stackoverflow.com/questions/13944956/…
desbest

3
संबंधित अद्यतन, PHP7 में mysql_ * फ़ंक्शंस को हटा दिया गया है। इसके बजाय MySQLi का उपयोग करें।
टेकडूड

जवाबों:


142

आपकी समस्या के कुछ समाधान हैं।

MySQLi का तरीका इस तरह होगा:

<?php
$connection = mysqli_connect('localhost', 'username', 'password', 'database');

डेटाबेस प्रश्नों को चलाने के लिए भी पुराने तरीके से सरल और लगभग समान है:

<?php
// Old way
mysql_query('CREATE TEMPORARY TABLE `table`', $connection);
// New way
mysqli_query($connection, 'CREATE TEMPORARY TABLE `table`');

Mysql_ * से उनके सहित सभी पदावनत चेतावनी को बंद करें:

<?php
error_reporting(E_ALL ^ E_DEPRECATED);

सटीक फ़ाइल और लाइन स्थान जिसे बदलने की आवश्यकता है, "/System/Startup.php> लाइन: 2" error_reporting (E_All); error_reporting (E_ALL ^ ​​E_DEPRECATED) के साथ बदलें;


34

आप mysql_connect से पहले '@' जोड़कर चेतावनी को हटा सकते हैं।

@mysql_connect('localhost','root','');

लेकिन जैसा कि चेतावनी आपको बता रही है, भविष्य में mysql एक्सटेंशन हटाने के बाद से mysqli या PDO का उपयोग करें।


1
मैं देख रहा हूँ कि आप न केवल स्वयं बुरे तरीकों का उपयोग कर रहे हैं, बल्कि दूसरों को ऐसा करने के लिए भी कह रहे हैं
Your Common Sense

29
चेतावनी को छिपाना एक अच्छा काम है। यह कार्यक्रम को चालू रखता है, और mysql_xxxx फ़ंक्शंस का कोई मतलब नहीं है क्योंकि वे वर्तमान संस्करण में अच्छी तरह से काम करते हैं। आप सभी के बारे में बता रहे हैं कि यह पदावनत किया जा रहा है। हर कोई देख सकता है कि यह पदावनत है, हाँ, धन्यवाद, अगली कृपया। भविष्य में, mysql फ़ंक्शन कॉल स्पष्ट रूप से प्रतिस्थापित हो जाएंगे। तब तक, चेतावनी को छिपाना एक व्यावहारिक सलाह है कि साइट को संचालित करने की अनुमति दें, जबकि हम चुपचाप पृष्ठभूमि में कुछ और के साथ mysql_xxx कॉल की जगह ले रहे हैं। अंधविश्वासी मत बनो।
dkellner

5
अविश्वसनीय रूप से उपयोगी टिप्पणियां यहां .. अपने लाइव कोड को हटाए गए चेतावनियों को छोड़ दें? अच्छा .. ज़ाहिर है कि चेतावनी छिपाना आदर्श नहीं है, लेकिन फिर भी कोड को काम करने के क्रम में रखना चाहिए। एक अच्छा डेवलपर अभी भी पदावनत कोड का ट्रैक रखेगा और इसे भविष्य के अपडेट के लिए शेड्यूल करेगा।
स्टिरॉकड

1
त्रुटि / चेतावनी दमन यह नहीं है कि यह कैसे तय किया जाता है - यदि आपके पास अपने उत्पादन सर्वर पर कच्ची चेतावनियाँ / त्रुटियाँ हैं, तो आप इसे गलत कर रहे हैं - यदि आपके पास केवल उत्पादन सर्वर है और परीक्षण के लिए कोई विकास का वातावरण नहीं है, तो आप ' इसे फिर से करना गलत है - यदि आप उत्पादन जारी करने से पहले विकास में त्रुटियों / चेतावनियों को ठीक नहीं कर रहे हैं, तो आप इसे सबसे गलत कर रहे हैं
HorusKol

1
@sturrockad एक अच्छे डेवलपर ने त्रुटियों को बेहतर तरीके से संभाला होगा ताकि वे कभी भी सार्वजनिक रूप से लीक न हों और केवल डेवलपर्स को देखने के लिए बैक-एंड में लॉग इन करें। यदि आप अभी भी वाइल्ड में त्रुटि संदेश जारी करके लाइव कोड को तोड़ रहे हैं, तो आपको संभवतः अपनी पूरी वेबसाइट पर फिर से विचार करना चाहिए। यह चेतावनी को दबाने के लिए एक वैध बहाना नहीं है।
animuson

10

इस अकेले के लिए पदावनत संदेश को दबाने के लिए (और अपने कोड में अन्य पदावनतियों से अवगत रहें) आप @ के साथ कनेक्ट को उपसर्ग कर सकते हैं:

<?php
$connect = @mysql_connect('localhost','root','');
mysql_select_db('dbname');
?> 

ध्यान दें कि PHP 7+ के साथ यह अब काम नहीं करेगा (इस प्रकार मेरा डाउनवोट); यह एक 'समाधान' नहीं है ...
Gwyneth Llewelyn

ओपी केवल PHP 5.5 और 5.6 द्वारा उत्पन्न एक पदावनति संदेश के बारे में है। समाधान पर्यावरण के भीतर खड़ा है जिसमें ओपी संदेश दिखाया गया है।
IanMcL

8

PHP 5.5.x में विकृत सुविधाएँ

मूल MySQL विस्तार अब पदावनत है, और उत्पन्न होगा E_DEPRECATEDजब एक डेटाबेस से कनेक्ट त्रुटियों। इसके बजाय, ** MYSQLi या PDO_MySQL एक्सटेंशन का उपयोग करें। **

वाक्य - विन्यास:

<?php
  $connect = mysqli_connect('localhost', 'user', 'password', 'dbname');

इसके अलावा, सभी mysql_*फ़ंक्शंस को mysqli_*फ़ंक्शंस में बदलें

के बजाय

<?php
 $connect = mysql_connect('localhost','root','');
  mysql_select_db('dbname');
?> 

6

यह चेतावनी प्रदर्शित होती है क्योंकि एक नया विस्तार दिखाई दिया है। यह मानता है कि आप अभी भी पुराने का उपयोग कर सकते हैं लेकिन कुछ मामलों में यह असंभव है।

मैं आपको दिखाता हूं कि मैं डेटाबेस के साथ कनेक्शन कैसे करता हूं। आपको बस चर के मूल्यों को बदलने की जरूरत है।

मेरी कनेक्शन फ़ाइल: connection.php

<?php    
 $host='IP or Server Name (usually "localhost") ';
 $user='Database user';
 $password='Database password';
 $db='Database name';

 //PHP 5.4 o earlier (DEPRECATED)
 $con = mysql_connect($host,$user,$password) or exit("Connection Error");
 $connection = mysql_select_db($db, $con);

 //PHP 5.5 (New method)
 $connection =  mysqli_connect($host,$user,$password,$db);
?>

एक्सटेंशन क्वेरी करते समय बहुत बदल जाता है।

क्वेरी फ़ाइल: "example.php"

<?php
 //First I call for the connection
 require("connection.php");

 // ... Here code if you need do something ...

 $query = "Here the query you are going to perform";

 //QUERY PHP 5.4 o earlier (DEPRECATED)
 $result = mysql_query ($query) or exit("The query could not be performed");

 //QUERY PHP 5.5 (NEW EXTENSION)
 $result = mysqli_query ($query) or exit("The query could not be performed");    
?>

यह तरीका MySQL इम्प्रूव्ड एक्सटेंशन का उपयोग कर रहा है , लेकिन आप पीडीओ (PHP डेटा ऑब्जेक्ट) का उपयोग कर सकते हैं ।

पहली विधि का उपयोग केवल MySQL डेटाबेस के साथ किया जा सकता है, लेकिन पीडीओ विभिन्न प्रकार के डेटाबेस का प्रबंधन कर सकता है।

मैं एक उदाहरण रखने जा रहा हूं, लेकिन यह कहना आवश्यक है कि मैं केवल पहले एक का उपयोग करता हूं, इसलिए यदि कोई त्रुटि हो तो कृपया मुझे सुधार दें।

मेरी पीडीओ कनेक्शन फ़ाइल: "PDOconnection.php"

<?php
 $hostDb='mysql:host= "Here IP or Server Name";dbname="Database name" ';
 $user='Database user';
 $password='Database password';

 $connection = new PDO($hostDb, $user, $password);
?>

क्वेरी फ़ाइल (PDO): "example.php"

<?php
 $query = "Here the query you are going to perform";
 $result=$connection->$query;
?>

केवल यह कहना कि आप चेतावनी को छिपा सकते हैं, लेकिन यह एक अच्छा विचार नहीं है क्योंकि भविष्य में समय बचाने में आपकी मदद कर सकता है यदि कोई त्रुटि होती है (हम सभी सिद्धांत को जानते हैं लेकिन यदि आप कभी-कभी बहुत घंटे काम करते हैं .. । मस्तिष्क ^ ^ नहीं है)।


4

ऐसा इसलिए है क्योंकि आप PHP 5.5 का उपयोग कर रहे हैं या आपके वेबसर्वर को 5.5.0 में अपग्रेड किया गया है।

mysql_*कार्यों 5.5.0 के रूप में पदावनत किया गया है

यहां छवि विवरण दर्ज करें

Source



1

इसकी बस एक चेतावनी जो आपको बता रही है कि अपने db से जुड़ने के नए तरीकों का उपयोग करना शुरू करें जैसे कि pdo ऑब्जेक्ट्स

http://code.tutsplus.com/tutorials/php-database-access-are-you-doing-it-correctly--net-25338

मैनुअल यहाँ है

http://www.php.net/manual/en/book.pdo.php


1

सामान्य रूप से चेतावनी "पदावनत" का अर्थ है कि आप पुराने उपयोग वाले फ़ंक्शन का उपयोग करने का प्रयास कर रहे हैं। इसका मतलब यह नहीं है कि आपका कोड काम नहीं करेगा, लेकिन आपको रिफैक्टिंग पर विचार करना चाहिए।

आपके मामले में फंक्शंस mysql_ को पदावनत कर दिया गया है। यदि आप इसके बारे में अधिक जानना चाहते हैं तो यहां पहले से ही अच्छी व्याख्या है: मुझे PHP में mysql_ * फ़ंक्शन का उपयोग क्यों नहीं करना चाहिए?


1
<?php 
$link = mysqli_connect('localhost','root',''); 
if (!$link) { 
    die('Could not connect to MySQL: ' . mysqli_error()); 
} 
echo 'Connection OK'; mysqli_close($link); 
?>

इससे आपकी समस्या दूर हो जाएगी।


1

पीडीओ वर्ग इन विधियों की जगह लेता है। मिसाल या मारियाबीडी के लिए उदाहरण:

$BDD_SQL = new PDO('mysql:host='.BDD_SQL_SERVER.';dbname='.BDD_SQL_BASE.';charset=utf8', 
        BDD_SQL_LOGIN, BDD_SQL_PWD, 
        array(
          PDO::ATTR_EMULATE_PREPARES => false,
          PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, //launch exception if error
          PDO::ATTR_DEFAULT_FETCH_MODE=> PDO::FETCH_ASSOC
                ));

स्रोत: पीडीओ क्लास


1

अगर आपने अपनी कोडिंग कर ली है तो

ini_set("error_reporting", E_ALL & ~E_DEPRECATED); 

अच्छा विकल्प है लेकिन अगर आप शुरुआत में हैं तो निश्चित रूप से आपको mysqli का उपयोग करना चाहिए।


1

खैर, मुझे आज ऐसे संदेश का सामना करना पड़ा जब मैं नई होस्टिंग पर गया! वैसे भी मैंने "mySQL" को "mySQLi" में बदलने की कोशिश की है, लेकिन काम नहीं कर रहा है, इसलिए मैंने यह किया है:

<?php
# FileName="Connection_php_mysql.htm"
# Type="MYSQL"
# HTTP="true"
# Turn off all error reporting
error_reporting(0);
$connect_myconn = "Database Connection";
$hostname_myconn = "localhost";
$database_myconn = "db name";
$username_myconn = "user name";
$password_myconn = "pass";
$myconn = mysql_connect($hostname_myconn, $username_myconn, $password_myconn) or die("<h1 style=margin:0;>A MySQL error has occurred.</h1><p><b>Your Query:</b> " . $connect_myconn . "<br /> <b>Error Number:</b> (" . mysql_errno() . ")</p>" . mysql_error());
mysql_select_db($database_myconn, $myconn);
?>

चाल त्रुटि रिपोर्टिंग बंद करने के लिए है :)

# Turn off all error reporting
error_reporting(0);

PHP 7+ के लिए आप इस कोड का उपयोग कर सकते हैं:

ini_set('display_errors', 0);
ini_set('log_errors', 1);

धन्यवाद


1
नमस्ते, हाँ, PHP 7+ के लिए आप इसका उपयोग कर सकते हैं ini_set('display_errors', 0); ini_set('log_errors', 1);। मैं उपरोक्त उत्तर को अपडेट करूंगा। धन्यवाद।
मिजो गेम्स

-3

इसे अपने php पेज में डालें।

ini_set("error_reporting", E_ALL & ~E_DEPRECATED); 

ध्यान दें कि PHP 7+ के साथ यह अब काम नहीं करेगा (इस प्रकार मेरा डाउनवोट); यह एक 'समाधान' नहीं है ...
ग्वेनेथ लेलेवेन

-5

@मेरे लिए एक काम जोड़ना !

मैंने परीक्षण किया error_reporting(E_ALL ^ E_DEPRECATED);


1
आप त्रुटि को हल नहीं कर रहे हैं, आप केवल संदेश छिपा रहे हैं
लियोनार्डो सैप्यू

ध्यान दें कि PHP 7+ के साथ यह अब काम नहीं करेगा (इस प्रकार मेरा डाउनवोट); यह एक 'समाधान' नहीं है ...
ग्वेनेथ लेलेवेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.