Tidak digunakan lagi: mysql_connect ()


95

Saya mendapatkan peringatan ini, tetapi program masih berjalan dengan benar.

Kode MySQL menunjukkan kepada saya pesan dalam PHP:

Tidak digunakan lagi: mysql_connect (): Ekstensi mysql tidak digunakan lagi dan akan dihapus di masa mendatang: gunakan mysqli atau PDO sebagai gantinya di C: \ xampp \ htdocs \ task \ media \ new \ connect.inc.php on line 2

connect.inc.phpHalaman saya adalah

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

Apa artinya ini dan bagaimana cara menghilangkan pesan tersebut?


5
Gunakan fungsi mysqli_ * atau PDO !!!!
Krish R


3
Pembaruan terkait, fungsi mysql_ * telah dihapus di PHP7. Gunakan MySQLi sebagai gantinya.
techdude

Jawaban:


142

Ada beberapa solusi untuk masalah Anda.

Cara dengan MySQLi akan seperti ini:

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

Untuk menjalankan query database juga sederhana dan hampir identik dengan cara lama:

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

Matikan semua peringatan yang tidak berlaku lagi termasuk dari mysql_ *:

<?php
error_reporting(E_ALL ^ E_DEPRECATED);

File yang tepat dan lokasi baris yang perlu diganti adalah "/System/Startup.php> baris: 2" error_reporting (E_All); ganti dengan error_reporting (E_ALL ^ ​​E_DEPRECATED);


34

Anda dapat menghapus peringatan dengan menambahkan '@' sebelum mysql_connect.

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

tetapi seperti peringatan yang memberitahu Anda, gunakan mysqli atau PDO karena ekstensi mysql akan dihapus di masa mendatang.


1
Saya melihat Anda tidak hanya menggunakan praktik buruk pada diri Anda sendiri tetapi bahkan menyuruh orang lain untuk melakukannya
Akal

29
Menyembunyikan peringatan adalah HAL YANG BAIK. Itu membuat program tetap berjalan, dan fungsi mysql_xxxx berarti tidak ada masalah saat ini karena mereka bekerja dengan baik di versi saat ini. Semua yang Anda ceritakan tentang hal itu yang tidak digunakan lagi adalah BAGIAN DARI PESAN KESALAHAN jadi bukanlah hal yang bijaksana untuk mengulanginya. Semua orang bisa melihat itu sudah usang, ya, terima kasih, selanjutnya silakan. Di masa depan, pemanggilan fungsi mysql jelas akan diganti. Sampai saat itu, menyembunyikan peringatan adalah saran praktis untuk memungkinkan situs beroperasi sementara kami secara diam-diam mengganti panggilan mysql_xxx dengan yang lain di latar belakang. Jangan percaya takhayul.
dkellner

5
Komentar yang sangat membantu di sini .. Tinggalkan peringatan usang dan hancurkan kode langsung Anda? Bagus .. Tentu saja menyembunyikan peringatan itu tidak ideal tetapi itu tetap harus dilakukan untuk menjaga kode tetap berfungsi. Pengembang yang baik akan tetap melacak kode yang tidak digunakan lagi dan menjadwalkannya untuk pembaruan di masa mendatang.
sturrockad

1
kesalahan / peringatan penekanan bukanlah bagaimana ini diperbaiki - jika Anda memiliki peringatan mentah / kesalahan yang disajikan kepada pengguna di server produksi Anda, Anda melakukannya dengan salah - jika Anda hanya memiliki server produksi dan tidak ada lingkungan pengembangan untuk pengujian, Anda ' melakukan kesalahan lagi - jika Anda tidak memperbaiki kesalahan / peringatan dalam pengembangan sebelum merilis ke produksi, Anda melakukannya dengan cara yang salah
HorusKol

1
@sturrockad Pengembang yang baik akan menangani kesalahan dengan lebih baik sehingga tidak pernah bocor ke publik dan hanya masuk di bagian belakang untuk dilihat oleh pengembang. Jika Anda masih memecahkan kode langsung dengan merilis pesan kesalahan ke alam liar, Anda mungkin harus memikirkan ulang seluruh situs web Anda. Itu bukan alasan yang valid untuk menyembunyikan peringatan.
animuson

10

Untuk menyembunyikan pesan penghentian untuk ini saja (dan tetap terinformasi tentang penghentian lainnya dalam kode Anda), Anda dapat mengawali koneksi dengan @:

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

Perhatikan bahwa dengan PHP 7+ ini tidak akan berfungsi lagi (jadi downvote saya); ini bukan 'solusi' ...
Gwyneth Llewelyn

OP adalah tentang pesan penghentian yang hanya dibuat oleh PHP 5.5 dan 5.6. Solusinya berdiri dalam lingkungan tempat pesan OP ditampilkan.
IanMcL

8

Fitur yang tidak digunakan lagi di PHP 5.5.x

The ekstensi MySQL asli sekarang tidak berlaku lagi dan akan menghasilkan E_DEPRECATEDkesalahan saat menghubungkan ke database. Sebagai gantinya, gunakan ekstensi ** MYSQLi atau PDO_MySQL . **

Sintaksis:

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

Juga, ganti semua mysql_*fungsi menjadi mysqli_*fungsi

dari pada

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

6

Peringatan ini ditampilkan karena ekstensi baru telah muncul. Ini mendukung bahwa Anda masih dapat menggunakan yang lama tetapi dalam beberapa kasus tidak mungkin.

Saya tunjukkan bagaimana saya melakukan koneksi dengan database. Anda hanya perlu mengubah nilai variabel.

File koneksi saya: 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);
?>

Ekstensi juga berubah saat melakukan kueri.

File Permintaan: "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");    
?>

Cara ini menggunakan MySQL Improved Extension , tetapi Anda dapat menggunakan PDO (PHP Data Objects) .

Metode pertama hanya dapat digunakan dengan database MySQL, tetapi PDO dapat mengelola berbagai jenis database.

Saya akan memberikan contoh tetapi perlu dikatakan bahwa saya hanya menggunakan yang pertama, jadi mohon koreksi saya jika ada kesalahan.

File koneksi PDO saya: "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);
?>

File Permintaan (PDO): "example.php"

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

Untuk menyelesaikannya cukup katakan bahwa tentu saja Anda dapat menyembunyikan peringatan tetapi itu bukan ide yang baik karena dapat membantu Anda menghemat waktu di masa mendatang jika terjadi kesalahan (kita semua tahu teorinya tetapi jika Anda bekerja berjam-jam kadang-kadang .. . otak tidak ada ^^).


4

Itu karena Anda menggunakan PHP 5.5 atau server web Anda akan ditingkatkan ke 5.5.0.

The mysql_*fungsi telah usang sebagai dari 5.5.0

masukkan deskripsi gambar di sini

Source




1

Peringatan "deprecated" secara umum berarti Anda mencoba menggunakan fungsi yang sudah usang. Ini tidak berarti bahwa kode Anda tidak akan berfungsi, tetapi Anda harus mempertimbangkan pemfaktoran ulang.

Dalam kasus Anda functons mysql_ tidak digunakan lagi. Jika Anda ingin tahu lebih banyak tentang itu, berikut adalah penjelasan yang bagus: Mengapa saya tidak menggunakan fungsi mysql_ * di PHP?


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

Ini akan menyelesaikan masalah Anda.


1

Kelas PDO menggantikan metode ini. Contoh untuk Mysql atau MariaDB:

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

Sumber: Kelas PDO


1

Jika Anda telah melakukan pengkodean maka

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

adalah pilihan yang bagus tetapi jika Anda baru memulai, maka Anda harus menggunakan mysqli.


1

Nah, saya baru saja menghadapi pesan seperti itu hari ini ketika saya pindah ke hosting baru! bagaimanapun saya telah mencoba untuk mengubah "mySQL" menjadi "mySQLi" tetapi tidak berfungsi, jadi saya telah melakukan ini:

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

Triknya adalah dengan menonaktifkan pelaporan kesalahan :)

# Turn off all error reporting
error_reporting(0);

Untuk PHP 7+ Anda dapat menggunakan kode ini sebagai gantinya:

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

Terima kasih


1
Hai, Ya, untuk PHP 7+ Anda dapat menggunakan ini ini_set('display_errors', 0); ini_set('log_errors', 1);. Saya akan memperbarui jawaban di atas. Terima kasih.
Mizo Games

-3

letakkan ini di halaman php Anda.

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

Perhatikan bahwa dengan PHP 7+ ini tidak akan berfungsi lagi (jadi downvote saya); ini bukan 'solusi' ...
Gwyneth Llewelyn

-5

Menambahkan @karya untuk saya!

Saya diuji dengan error_reporting(E_ALL ^ E_DEPRECATED);


1
Anda tidak memecahkan kesalahan, Anda hanya menyembunyikan pesannya
Leonardo Sapuy

Perhatikan bahwa dengan PHP 7+ ini tidak akan berfungsi lagi (jadi downvote saya); ini bukan 'solusi' ...
Gwyneth Llewelyn
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.