-
Tại sao điều này lại xảy ra?
Toàn bộ
ext/mysql
Phần mở rộng PHP, cung cấp tất cả các hàm được đặt tên với tiền tốmysql_
, chính thức không được dùng nữa trong PHP v5.5.0 và bị xóa trong PHP v7 .Ban đầu nó được giới thiệu trong phiên bản PHP v2.0 (tháng 11 năm 1997) cho MySQL v3.20 và không có tính năng mới nào được thêm vào kể từ năm 2006. Cùng với việc thiếu các tính năng mới là những khó khăn trong việc duy trì mã cũ giữa các lỗ hổng bảo mật phức tạp.
Sách hướng dẫn này có các cảnh báo chống lại việc sử dụng nó trong mã mới kể từ tháng 6 năm 2011.
-
Tôi có thể sửa nó như thế nào?
Như thông báo lỗi cho thấy, có hai phần mở rộng MySQL khác mà bạn có thể xem xét: MySQLi và PDO_MySQL , một trong hai có thể được sử dụng thay vì
ext/mysql
. Cả hai đều có trong lõi PHP kể từ v5.0, vì vậy nếu bạn đang sử dụng phiên bản đang gặp phải những lỗi không dùng nữa thì bạn gần như chắc chắn có thể bắt đầu sử dụng chúng ngay lập tức — tức là. mà không cần nỗ lực cài đặt.Chúng hơi khác nhau một chút, nhưng cung cấp một số lợi thế so với tiện ích mở rộng cũ, bao gồm hỗ trợ API cho các giao dịch, các thủ tục được lưu trữ và các câu lệnh chuẩn bị (do đó cung cấp cách tốt nhất để đánh bại tấn công chèn SQL ). Nhà phát triển PHP Ulf Wendel đã viết so sánh kỹ lưỡng về các tính năng .
Hashphp.org có hướng dẫn tuyệt vời về cách di chuyển từ
ext/mysql
tới PDO . -
Tôi hiểu rằng có thể loại bỏ các lỗi không dùng nữa bằng cách đặt
error_reporting
trongphp.ini
để loại trừE_DEPRECATED
:error_reporting = E_ALL ^ E_DEPRECATED
Điều gì sẽ xảy ra nếu tôi làm điều đó?
Có, có thể loại bỏ các thông báo lỗi như vậy và tiếp tục sử dụng
ext/mysql
cũ gia hạn trong thời gian này. Nhưng bạn thực sự không nên làm điều này —Đây là cảnh báo cuối cùng từ các nhà phát triển rằng tiện ích này có thể không được kết hợp với các phiên bản PHP trong tương lai (thực sự, như đã đề cập, nó đã bị xóa khỏi PHP v7). Thay vào đó, bạn nên tận dụng cơ hội này để di chuyển ứng dụng của mình ngay bây giờ , trước khi quá muộn.Cũng lưu ý rằng kỹ thuật này sẽ ngăn chặn tất cả
E_DEPRECATED
tin nhắn, không chỉ những tin nhắn liên quan đếnext/mysql
phần mở rộng:do đó bạn có thể không biết về những thay đổi sắp tới khác đối với PHP sẽ ảnh hưởng đến mã ứng dụng của bạn. Tất nhiên, chỉ có thể loại bỏ các lỗi phát sinh trên biểu thức đang được đề cập bằng cách sử dụng PHP's toán tử kiểm soát lỗi -I E. viết trước dòng có liên quan bằng@
—Điều này sẽ ngăn chặn tất cả lỗi do biểu thức đó tạo ra, không chỉE_DEPRECATED
những cái.
Bạn nên làm gì?
-
Bạn đang bắt đầu một dự án mới.
Không có hoàn toàn không có lý do gì để sử dụng
ext/mysql
—Chọn một trong những tiện ích mở rộng khác, hiện đại hơn, thay vào đó và gặt hái phần thưởng từ những lợi ích mà chúng cung cấp. -
Bạn có cơ sở mã kế thừa (của riêng bạn) hiện phụ thuộc vào
ext/mysql
.Sẽ là khôn ngoan nếu thực hiện kiểm tra hồi quy:bạn thực sự không nên thay đổi bất cứ điều gì (đặc biệt là nâng cấp PHP) cho đến khi bạn đã xác định được tất cả các khu vực tiềm ẩn tác động, lập kế hoạch xung quanh từng khu vực đó và sau đó kiểm tra kỹ lưỡng giải pháp của bạn trong môi trường tổ chức.
-
Theo thực tiễn viết mã tốt, ứng dụng của bạn đã được phát triển theo kiểu tích hợp / mô-đun lỏng lẻo và các phương thức truy cập cơ sở dữ liệu đều độc lập ở một nơi có thể dễ dàng hoán đổi cho một trong các tiện ích mở rộng mới.
Dành nửa giờ để viết lại mô-đun này để sử dụng một trong những tiện ích mở rộng khác, hiện đại hơn; kiểm tra kỹ lưỡng. Sau đó, bạn có thể giới thiệu các cải tiến khác để gặt hái phần thưởng từ những lợi ích mà họ cung cấp.
-
Các phương thức truy cập cơ sở dữ liệu nằm rải rác khắp nơi và không thể dễ dàng hoán đổi cho một trong các tiện ích mở rộng mới.
Cân nhắc xem bạn có thực sự cần nâng cấp lên PHP v5.5 vào lúc này hay không.
Bạn nên bắt đầu lập kế hoạch thay thế
ext/mysql
với một trong những tiện ích mở rộng khác, hiện đại hơn, để bạn có thể gặt hái phần thưởng từ những lợi ích mà chúng cung cấp; bạn cũng có thể sử dụng nó như một cơ hội để cấu trúc lại các phương thức truy cập cơ sở dữ liệu của mình thành một cấu trúc mô-đun hơn.Tuy nhiên, nếu bạn có một khẩn cấp cần phải nâng cấp PHP ngay lập tức, bạn có thể cân nhắc loại bỏ các lỗi không dùng nữa trong thời điểm hiện tại:nhưng trước tiên hãy đảm bảo xác định bất kỳ lỗi ngừng dùng nào khác cũng đang được phát sinh.
-
-
Bạn đang sử dụng dự án của bên thứ ba phụ thuộc vào
ext/mysql
.Cân nhắc xem bạn có thực sự cần nâng cấp lên PHP v5.5 vào lúc này hay không.
Kiểm tra xem nhà phát triển đã đưa ra bất kỳ bản sửa lỗi, cách giải quyết hoặc hướng dẫn nào liên quan đến vấn đề cụ thể này hay chưa; hoặc, nếu không, hãy gây áp lực để họ làm như vậy bằng cách đưa vấn đề này ra để họ chú ý. Nếu bạn có một khẩn cấp cần phải nâng cấp PHP ngay lập tức, bạn có thể cân nhắc loại bỏ các lỗi không dùng nữa trong thời điểm hiện tại:nhưng trước tiên hãy đảm bảo xác định bất kỳ lỗi ngừng dùng nào khác cũng đang được phát sinh.
Việc thực hiện kiểm tra hồi quy là hoàn toàn cần thiết.