Kullanımdan kaldırıldı: mysql_connect ()


98

Bu uyarıyı alıyorum, ancak program hala düzgün çalışıyor.

MySQL kodu bana PHP'de bir mesaj gösteriyor:

Kullanımdan kaldırıldı: mysql_connect (): mysql uzantısı kullanımdan kaldırıldı ve gelecekte kaldırılacak: 2. satırda C: \ xampp \ htdocs \ task \ media \ new \ connect.inc.php yerine mysqli veya PDO kullanın

Benim connect.inc.phpsayfası

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

Bu ne anlama geliyor ve mesajı nasıl ortadan kaldırabilirim?


5
Mysqli_ * işlevlerini veya PDO'yu kullanın !!!!
Krish R


3
İlgili güncelleme, mysql_ * işlevleri PHP7'de kaldırılmıştır. Bunun yerine MySQLi'yi kullanın.
techdude

Yanıtlar:


145

Sorununuzun birkaç çözümü var.

MySQLi ile yol şu şekilde olacaktır:

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

Veritabanı sorgularını çalıştırmak da basittir ve eski yöntemle neredeyse aynıdır:

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

Mysql_ * de dahil olmak üzere tüm kullanımdan kaldırılmış uyarıları kapatın:

<?php
error_reporting(E_ALL ^ E_DEPRECATED);

Değiştirilmesi gereken Tam dosya ve satır konumu "/System/Startup.php> satır: 2" error_reporting (E_All); error_reporting ile değiştirin (E_ALL ^ ​​E_DEPRECATED);


34

Mysql_connect'in önüne bir '@' ekleyerek uyarıyı kaldırabilirsiniz.

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

ancak uyarının size söylediği gibi, mysql uzantısı ileride kaldırılacağı için mysqli veya PDO kullanın.


2
Ben sadece şekilde tüm kendini kötü uygulamaları kullanarak ama buna rağmen başkalarını buna söylemediğin bkz
Sizin Common Sense

29
Uyarıyı gizlemek İYİ BİR ŞEYDİR. Programın devam etmesini sağlar ve mysql_xxxx işlevleri, mevcut sürümde iyi çalıştıkları için şu anda sorun olmadığı anlamına gelir. Kullanımdan kaldırıldığına dair tüm anlattığınız, HATA MESAJININ BİR PARÇASI olduğundan, tekrarlanması akıllıca bir şey değildir. Herkes onun kullanımdan kaldırıldığını görebilir, evet, teşekkür ederim, sonra lütfen. Gelecekte mysql işlev çağrıları açıkça değiştirilecektir. O zamana kadar, uyarıyı gizlemek, mysql_xxx çağrılarını arka planda başka bir şeyle sessizce değiştirirken sitenin çalışmasına izin vermek için pratik bir tavsiyedir. Batıl inançlı olmayın.
dkellner

5
İnanılmaz derecede yararlı yorumlar burada .. Kullanımdan kaldırılan uyarıları içeride bırakıp canlı kodunuzu kırmak ister misiniz? Güzel .. Elbette uyarıyı gizlemek ideal değildir, ancak yine de kodu çalışır durumda tutmak için yapılmalıdır. İyi bir geliştirici, kullanımdan kaldırılmış kodu izlemeye devam edecek ve gelecekteki bir güncelleme için planlayacaktır.
sturrockad

1
hata / uyarı bastırma bunun nasıl düzeltileceği değildir - üretim sunucunuzda kullanıcılara ham uyarılar / hatalar sunuluyorsa, yanlış yapıyorsunuzdur - yalnızca bir üretim sunucunuz varsa ve test için geliştirme ortamınız yoksa, siz ' yanlış yapıyorsun - üretime yayınlamadan önce geliştirme aşamasındaki hataları / uyarıları düzeltmiyorsan, bunu çok yanlış yapıyorsun
HorusKol

1
@sturrockad İyi bir geliştirici , hataları daha iyi idare ederdi, bu yüzden asla halka sızmazlar ve yalnızca geliştiricilerin görmesi için arka uçta oturum açarlar. Hata mesajlarını vahşice yayınlayarak canlı kodu hala kırıyorsanız, muhtemelen web sitenizin tamamını yeniden düşünmelisiniz. Uyarıları bastırmak için geçerli bir bahane değil.
animuson

10

Yalnızca bunun için kullanımdan kaldırma mesajını gizlemek (ve kodunuzdaki diğer kullanımdan kaldırmalardan haberdar olmak) için connect'in başına @ koyabilirsiniz:

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

PHP 7+ ile bunun artık çalışmayacağını unutmayın (dolayısıyla benim olumsuz oyum); bu bir 'çözüm' değil ...
Gwyneth Llewelyn

OP, yalnızca PHP 5.5 ve 5.6 tarafından oluşturulan bir kullanımdan kaldırma mesajı hakkındadır. Çözüm, OP mesajının gösterildiği ortamda durur.
IanMcL

8

PHP 5.5.x'te kullanımdan kaldırılan özellikler

Orijinal MySQL uzatma artık kalkmıştır ve üretecektir E_DEPRECATEDbir veritabanına bağlanırken hata. Bunun yerine ** MYSQLi veya PDO_MySQL uzantılarını kullanın. **

Sözdizimi:

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

Ayrıca, hepsini yerine mysql_*içine fonksiyonları mysqli_*fonksiyonları

onun yerine

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

6

Bu uyarı, yeni bir uzantı göründüğü için görüntülenir. Eskisini hala kullanabileceğinizi varsayar, ancak bazı durumlarda bu imkansızdır.

Veritabanıyla nasıl bağlantı kurduğumu size göstereceğim. Değişkenlerin değerlerini değiştirmeniz yeterlidir.

Bağlantı dosyam: 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);
?>

Bir sorgu gerçekleştirirken uzantı da değişir.

Sorgu Dosyası: "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");    
?>

Bu şekilde MySQL Geliştirilmiş Uzantı kullanılır , ancak PDO (PHP Veri Nesneleri) kullanabilirsiniz .

İlk yöntem yalnızca MySQL veri tabanlarıyla kullanılabilir, ancak PDO farklı veri tabanlarını yönetebilir.

Bir örnek vereceğim ama sadece ilkini kullandığımı söylemek gerekiyor, bu yüzden herhangi bir hata varsa lütfen beni düzeltin.

PDO bağlantı dosyam : "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);
?>

Sorgu Dosyası (PDO): "example.php"

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

Bitirmek için, tabii ki uyarıyı gizleyebileceğinizi söyleyin, ancak bu iyi bir fikir değildir, çünkü gelecekte bir hata olursa zamandan tasarruf etmenize yardımcı olabilir (hepimiz teoriyi biliyoruz, ancak bazen çok fazla çalışıyorsanız .. . beyin orada değil ^^).


4

Bunun nedeni, PHP 5.5 kullanıyor olmanız veya web sunucunuzun 5.5.0'a yükseltilmiş olmasıdır.

mysql_*Fonksiyonlar 5.5.0 itibariyle kullanımdan kaldırılmıştır

görüntü açıklamasını buraya girin

Source




1

Genel olarak "kullanımdan kaldırıldı" uyarısı, güncel olmayan işlevi kullanmaya çalıştığınız anlamına gelir. Kodunuzun çalışmayacağı anlamına gelmez, ancak yeniden düzenlemeyi düşünmelisiniz.

Sizin durumunuzda functons mysql_ kullanımdan kaldırılmıştır. Bununla ilgili daha fazla bilgi edinmek istiyorsanız, burada zaten iyi bir açıklama var: Neden PHP'de mysql_ * işlevlerini kullanmamalıyım?


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

Bu sorununu çözecektir.


1

PDO sınıfı bu yöntemlerin yerini alır. Mysql veya MariaDB için örnek:

$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
                ));

Kaynak: PDO Sınıfı


1

Kodlamanızı yaptıysanız, o zaman

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

iyi bir seçenektir ancak eğer başlıyorsanız o zaman kesinlikle mysqli kullanmalısınız.


1

Bugün yeni hostinge geçtiğimde böyle bir mesajla karşılaştım! her neyse, "mySQL" i "mySQLi" olarak değiştirmeye çalıştım ama çalışmıyorum, bu yüzden şunu yaptım:

<?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);
?>

İşin püf noktası, hata raporlamasını kapatmaktır :)

# Turn off all error reporting
error_reporting(0);

PHP 7+ için bunun yerine şu kodu kullanabilirsiniz:

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

Teşekkürler


1
Merhaba, Evet, PHP 7+ için bunu kullanabilirsiniz ini_set('display_errors', 0); ini_set('log_errors', 1);. Yukarıdaki cevabı güncelleyeceğim. Teşekkürler.
Mizo Games

-3

bunu php sayfanıza koyun.

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

PHP 7+ ile bunun artık çalışmayacağını unutmayın (dolayısıyla benim olumsuz oyum); bu bir 'çözüm' değil ...
Gwyneth Llewelyn

-5

@Benim için bir eser ekleniyor!

İle test ettim error_reporting(E_ALL ^ E_DEPRECATED);


1
Hatayı
çözmüyorsunuz

PHP 7+ ile bunun artık çalışmayacağını unutmayın (dolayısıyla benim olumsuz oyum); bu bir 'çözüm' değil ...
Gwyneth Llewelyn
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.