เลิกใช้งาน: mysql_connect ()


98

ฉันได้รับคำเตือนนี้ แต่โปรแกรมยังทำงานได้อย่างถูกต้อง

รหัส MySQL แสดงข้อความใน PHP:

เลิกใช้: mysql_connect (): ส่วนขยาย mysql เลิกใช้แล้วและจะถูกลบในอนาคต: ใช้ mysqli หรือ PDO แทนใน C: \ xampp \ htdocs \ task \ media \ new \ connect.inc.php ในบรรทัดที่ 2

connect.inc.phpเพจของฉันคือ

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

สิ่งนี้หมายความว่าอย่างไรและฉันจะกำจัดข้อความได้อย่างไร


5
ใช้ฟังก์ชัน mysqli_ * หรือ PDO !!!!
Krish R

อาจซ้ำกันได้ stackoverflow.com/questions/13944956/…
desbest

3
การอัปเดตที่เกี่ยวข้องฟังก์ชัน mysql_ * ถูกลบออกใน PHP7 ใช้ MySQLi แทน
techdude

คำตอบ:


145

วิธีแก้ปัญหาของคุณมีอยู่สองสามวิธี

วิธีการใช้ 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> line: 2" error_reporting (E_All); แทนที่ด้วย error_reporting (E_ALL ^ ​​E_DEPRECATED);


34

คุณสามารถลบคำเตือนโดยเพิ่ม "@" ก่อน mysql_connect

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

แต่ตามคำเตือนกำลังบอกคุณให้ใช้ mysqli หรือ PDO เนื่องจากส่วนขยาย mysql จะถูกลบออกในอนาคต


2
ฉันเห็นว่าคุณไม่เพียง แต่ใช้การปฏิบัติที่ไม่ดีทุกทาง แต่ยังบอกให้คนอื่นทำด้วย
สามัญสำนึกของคุณ

29
การซ่อนคำเตือนเป็นสิ่งที่ดี มันทำให้โปรแกรมทำงานต่อไปและฟังก์ชัน mysql_xxxx หมายความว่าไม่มีปัญหาในตอนนี้เนื่องจากทำงานได้ดีในเวอร์ชันปัจจุบัน สิ่งที่คุณบอกเกี่ยวกับการเลิกใช้งานเป็นส่วนหนึ่งของข้อความผิดพลาดดังนั้นจึงไม่ควรทำซ้ำ ทุกคนสามารถเห็นได้ว่ามันเลิกใช้งานแล้วใช่ขอบคุณโปรดครั้งต่อไป ในอนาคตการเรียกใช้ฟังก์ชัน mysql จะถูกแทนที่อย่างเห็นได้ชัด ในระหว่างนี้การซ่อนคำเตือนเป็นคำแนะนำที่ใช้ได้จริงเพื่อให้ไซต์ทำงานได้ในขณะที่เรากำลังแทนที่การโทร mysql_xxx แบบเงียบ ๆ ด้วยสิ่งอื่นในพื้นหลัง อย่าเชื่อโชคลาง
dkellner

5
ความคิดเห็นที่เป็นประโยชน์อย่างไม่น่าเชื่อที่นี่ .. ฝากคำเตือนที่เลิกใช้งานแล้วและทำลายรหัสที่ใช้งานจริงหรือไม่ ดี .. แน่นอนว่าการซ่อนคำเตือนนั้นไม่เหมาะ แต่ควรทำเพื่อให้โค้ดทำงานได้ดี นักพัฒนาที่ดีจะยังคงติดตามโค้ดที่เลิกใช้งานและกำหนดเวลาสำหรับการอัปเดตในอนาคต
sturrockad

1
การปราบปรามข้อผิดพลาด / คำเตือนไม่ใช่วิธีการแก้ไข - หากคุณมีคำเตือนดิบ / ข้อผิดพลาดที่นำเสนอต่อผู้ใช้บนเซิร์ฟเวอร์ที่ใช้งานจริงคุณกำลังทำผิดหากคุณมีเพียงเซิร์ฟเวอร์ที่ใช้งานจริงและไม่มีสภาพแวดล้อมการพัฒนาสำหรับการทดสอบคุณจะ ' กำลังทำมันผิด - ถ้าคุณไม่แก้ไขข้อผิดพลาด / คำเตือนในการพัฒนาก่อนที่จะปล่อยสู่การผลิตแสดงว่าคุณทำผิดอย่างที่สุด
HorusKol

1
@sturrockad นักพัฒนาที่ดีจะจัดการข้อผิดพลาดได้ดีกว่าดังนั้นจึงไม่รั่วไหลสู่สาธารณะและเข้าสู่ระบบแบ็คเอนด์เท่านั้นเพื่อให้นักพัฒนาเห็น หากคุณยังคงทำลายโค้ดที่ใช้งานอยู่โดยการปล่อยข้อความแสดงข้อผิดพลาดออกไปในป่าคุณควรคิดใหม่ทั้งเว็บไซต์ นั่นไม่ใช่ข้ออ้างที่ถูกต้องในการระงับคำเตือน
animuson

10

ในการระงับข้อความการเลิกใช้งานสำหรับสิ่งนี้เพียงอย่างเดียว (และรับทราบข้อมูลการเลิกใช้งานอื่น ๆ ในรหัสของคุณ) คุณสามารถนำหน้าการเชื่อมต่อด้วย @:

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

โปรดทราบว่าด้วย PHP 7+ สิ่งนี้จะใช้ไม่ได้อีกต่อไป (ดังนั้นการลงคะแนนของฉัน) มันไม่ใช่ 'วิธีแก้ปัญหา' ...
Gwyneth Llewelyn

OP เป็นข้อความเกี่ยวกับการเลิกใช้งานที่สร้างโดย PHP 5.5 และ 5.6 เท่านั้น วิธีแก้ปัญหาอยู่ในสภาพแวดล้อมที่แสดงข้อความ OP
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 Improved Extensionแต่คุณสามารถใช้PDO (PHP Data Objects)ได้

วิธีแรกสามารถใช้ได้กับฐานข้อมูล MySQL เท่านั้น แต่ PDO สามารถจัดการฐานข้อมูลประเภทต่างๆได้

ฉันจะยกตัวอย่าง แต่จำเป็นต้องบอกว่าฉันใช้เพียงอันแรกเท่านั้นดังนั้นโปรดแก้ไขฉันหากมีข้อผิดพลาดใด ๆ

ไฟล์การเชื่อมต่อ PDO ของฉัน: "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

เป็นเพียงคำเตือนที่บอกให้คุณเริ่มใช้วิธีการใหม่ในการเชื่อมต่อกับฐานข้อมูลของคุณเช่นวัตถุ pdo

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

คู่มืออยู่ที่นี่

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


1

คำเตือน "เลิกใช้งาน" โดยทั่วไปหมายความว่าคุณกำลังพยายามใช้ฟังก์ชันที่ล้าสมัย มันไม่ได้หมายความว่ารหัสของคุณจะไม่ทำงาน แต่คุณควรพิจารณาการปรับโครงสร้างใหม่

ในกรณีของคุณ functons mysql_ เลิกใช้งานแล้ว หากคุณต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับสิ่งนี้เป็นคำอธิบายที่ดีอยู่แล้วทำไมฉันไม่ควรใช้ฟังก์ชัน mysql_ * ใน PHP


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

วิธีนี้จะช่วยแก้ปัญหาของคุณ


1

คลาส PDO แทนที่เมธอดเหล่านี้ ตัวอย่างสำหรับ Mysql หรือ 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
                ));

ที่มา: คลาส PDO


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);ได้ ฉันจะอัปเดตคำตอบด้านบน ขอบคุณ.
Mizo Games

-3

ใส่ไว้ในหน้า php ของคุณ

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

โปรดทราบว่าด้วย PHP 7+ สิ่งนี้จะใช้ไม่ได้อีกต่อไป (ดังนั้นการลงคะแนนของฉัน) ไม่ใช่ 'วิธีแก้ปัญหา' ...
Gwyneth Llewelyn

-5

กำลังเพิ่ม@ผลงานให้ฉัน!

ฉันทดสอบด้วย error_reporting(E_ALL ^ E_DEPRECATED);


1
คุณไม่ได้แก้ไขข้อผิดพลาดคุณซ่อนข้อความไว้เท่านั้น
Leonardo Sapuy

โปรดทราบว่าด้วย PHP 7+ สิ่งนี้จะใช้ไม่ได้อีกต่อไป (ดังนั้นการลงคะแนนของฉัน) ไม่ใช่ 'วิธีแก้ปัญหา' ...
Gwyneth Llewelyn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.