Hàm không xác định mysql_connect ()


83

Tôi đã chạy aptitude install php5-mysql(và khởi động lại MySQL / Apache 2), nhưng tôi vẫn gặp lỗi này:

Lỗi nghiêm trọng: Gọi đến hàm không xác định mysql_connect () trong /home/validate.php trên dòng 21

phpinfo() cho biết tệp /etc/php5/apache2/conf.d/pdo_mysql.ini đã được phân tích cú pháp.


Làm thế nào về các hàm PHP / MySql được xây dựng trong khác? Chúng có hoạt động không?
samayo

Có lẽ là không, vì tôi đã thử nhập sai user / pass và câu lệnh 'or die' của tôi không hiển thị!
user1765369 11/12/12

Câu trả lời:


53

Vâng, đây là cơ hội của bạn! Có vẻ như PDO đã sẵn sàng; sử dụng thay thế.

Hãy thử kiểm tra xem mô-đun mở rộng PHP MySQL có đang được tải hay không:

<?php
    phpinfo();
?>

Nếu nó không có ở đó, hãy thêm phần sau vào php.initệp:

extension=php_mysql.dll

Đây có phải là cách tốt hơn để kết nối với cơ sở dữ liệu không? Tôi sẽ xem xét nó nhưng tôi thực sự muốn làm cho nó hoạt động trước vì nó đã hoạt động trước đây cho đến khi tôi chuyển sang một máy chủ mới.
user1765369 11/12/12

2
Nó là. mysql_*các hàm nguy hiểm và không được chấp nhận kể từ PHP 4.1. Kiểm tra nhật ký lỗi Apache của bạn và khởi động lại máy chủ. Có hiệu quả không?
wanovak

Tôi đang sử dụng xampp, sau khi thêm dòng đó vào php.ini, tôi nhận được thông báo sau trong lỗi apache .log Không thể tải thư viện động '\\ xampp \\ php \\ ext \\ php_mysql.dll
bigpony

1
@defmx Tệp .dll có tồn tại ở đường dẫn đó không? Nếu không, bạn cần phải cài đặt nó.
wanovak

64

Trong trường hợp bạn đang sử dụng PHP7, các hàm không dùng nữa trước đây mysql_*đã bị xóa hoàn toàn, vì vậy bạn nên cập nhật mã của mình bằng cách sử dụng hàm hoặc mysqli_*hàm PDO .

Nếu không thể, như một giải pháp thay thế , tôi đã tạo một tệp bao gồm PHP nhỏ, để tạo lại các mysql_*chức năng cũ với -functionsmysqli_*() : fix_mysql.inc.php


1
Giải pháp hoàn hảo cho trường hợp của tôi, tôi chưa thể nâng cấp và phá vỡ tất cả mã hiện có của mình. Tuy nhiên, biến $ con toàn cục trong tệp của bạn là một vấn đề vì tệp được bao gồm không thể đọc biến toàn cục của lớp cha mà tôi đã đưa vào nó. Tuy nhiên, tôi chỉ cần tạo một biến kết nối bên trong các chức năng của tệp được bao gồm khi cần thiết. Bây giờ mã của tôi hoạt động tốt. Cảm ơn bạn.
zeeshan

điều này rất hữu ích đối với tôi trong việc làm cho cơ sở mã cũ chạy lại trên nền tảng máy chủ mới hơn. chúc mừng!
mxmader

4
Cảm ơn .. nó đã cứu cuộc đời của tôi, nơi sản xuất được nâng cấp lên php7 và php5 ứng dụng bị phá vỡ
geekonweb

Đây là một giải pháp tuyệt vời để tiết kiệm thời gian nâng cấp một ứng dụng PHP cổ. Cảm ơn nhiều.
Joel Karunungan

cảm ơn @ ubo77. đã cứu một số vấn đề đau đầu trên cơ sở mã kế thừa.
mikoop

57

Tôi thấy rằng bạn đã gắn thẻ này với Ubuntu. Nhiều khả năng trình điều khiển MySQL (và có thể cả MySQL) không được cài đặt. Giả sử bạn có quyền truy cập SSH hoặc thiết bị đầu cuối và quyền sudo, hãy đăng nhập vào máy chủ và chạy điều này:

sudo apt-get install mysql-server mysql-client php5-mysql

Nếu gói MySQL hoặc gói php5-mysql đã được cài đặt, điều này sẽ cập nhật chúng.


CẬP NHẬT

Vì câu trả lời này thỉnh thoảng vẫn nhận được nhấp chuột nên tôi sẽ cập nhật nó để bao gồm PHP 7 . PHP 7 yêu cầu một gói khác cho MySQL, vì vậy bạn sẽ muốn sử dụng một đối số khác cho lệnh apt-get.

sudo apt-get install mysql-server mysql-common php7.0 php7.0-mysql

Và quan trọng, mysql_connect()đã không còn được chấp nhận kể từ phiên bản PHP v5.5.0. Tham khảo tài liệu chính thức tại đây: PHP: mysql_connect ()


Tôi không thể định vị gói php7.0
kỳ lạ là

Thay thế 7.0 bằng 7.3
rubo77

46

Nếu ai đó đến đây với sự cố về hình ảnh chính thức của docker php , hãy nhập lệnh bên dưới bên trong vùng chứa docker.

$ docker-php-ext-install mysql mysqli pdo pdo_mysql

Để biết thêm thông tin, vui lòng tham khảo liên kết trên How to install more PHP extensionsphần trên (Nhưng nó là một chút khó khăn cho tôi ...).

Hoặc tài liệu này có thể giúp bạn.

https://docs.docker.com/samples/library/php/


4
mysqllà những gì tôi muốn
deFreitas

17

Tôi cũng gặp phải vấn đề tương tự về MySQL_connect () không xác định. Tôi đã cố gắng thực hiện các thay đổi trong tệp PHP.ini nhưng nó gây ra lỗi tương tự. Sau đó, tôi tìm đến giải pháp này, nơi tôi đã thay đổi mã của mình từ các hàm php bị mất giá thành các hàm mới.

$con=mysqli_connect($host,$user,$password);

mysqli_select_db($con,dbname); 
//To select the database

session_start(); //To start the session

$query=mysqli_query($con,your query); 
//made query after establishing connection with database.

Tôi hy vọng điều này sẽ giúp bạn . Giải pháp này đang hoạt động chính xác đối với tôi.

BIÊN TẬP:

Nếu bạn nâng cấp mẫu php cũ, bạn cần apt-get install php7.0-mysql


7

Trong tệp php.ini

Thay đổi cai nay đi

;extension=php_mysql.dll

thành

extension=php_mysql.dll

6

Thử:

<?php
  phpinfo();
?>

Chạy trang và tìm kiếm mysql. Nếu không tìm thấy, hãy chạy phần sau trong shell và khởi động lại máy chủ Apache:

sudo apt-get install mysql-server mysql-client php5-mysql

Ngoài ra, hãy đảm bảo rằng bạn đã bỏ ghi chú tất cả các dòng sau đây ở đâu đó trong tệp apache2.conf (hoặc trong tệp conf.d / php.ini) của bạn, từ

;extension=php_mysql.so

đến

extension=php_mysql.so

4

Tôi đoán là cài đặt PHP của bạn không được biên dịch với sự hỗ trợ của MySQL.

Kiểm tra lệnh config của bạn ( php -i | grep mysql). Bạn sẽ thấy một cái gì đó như thế nào '--with-mysql=shared,/usr'.

Bạn có thể kiểm tra hướng dẫn đầy đủ tại http://php.net/manual/en/mysql.installation.php . Mặc dù, tôi muốn sử dụng giải pháp do @wanovak đề xuất.

Tuy nhiên, tôi nghĩ bạn cần hỗ trợ MySQL để sử dụng PDO.


1

Câu hỏi được gắn thẻ ubuntu, nhưng giải pháp bỏ nhận xét extension=mysqli.dlllà dành riêng cho windows. Tôi đang bối rối ở đây? !, Dù sao, điều đầu tiên là chạy <? php phpinfo ?>và tìm kiếm mysql*dưới Configurationtiêu đề. Nếu bạn không thấy thông báo như vậy có nghĩa là bạn chưa cài đặt hoặc kích hoạt php-mysql. Vì vậy, trước tiên hãy cài đặtphp-mysql

sudo apt get install php-mysql

Lệnh này sẽ cài đặt php-mysqltùy thuộc vào phpbạn đã cài đặt, vì vậy đừng lo lắng về phiên bản !!.

Sau đó đến giải pháp cụ thể cho unix, trong php.initệp bỏ chú thích dòng

extension=msql.so

xác minh rằng msql.socó trong /usr/lib/php/<timestamp_folder>, ELSE

extension=path/to/msql.so

Sau đó, cuối cùng khởi động lại apachemysqlcác dịch vụ, và bây giờ bạn sẽ thấy mysqlphần bên dưới Configrationstiêu đề trongphpinfo page


0

Tôi gặp lỗi này vì dự án tôi đang làm được phát triển trên php 5.6 và sau khi cài đặt, dự án không thể chạy trên php7.1.

Chỉ đối với bất kỳ ai sử dụng Vagrant với ubuntu / nginx, trong thư mục nginx (/ etc / nginx /), có một thư mục tên là "sites-available" chứa một tệp có tên giống như url được định cấu hình cho maschine vagrant. Trong trường hợp của tôi là homestead.app. Trong tệp này có một dòng cho biết điều gì đó như

    fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;

Ở đó bạn có thể thay đổi phiên bản php thành mong muốn cho trang web cụ thể đó.

Googled này nhưng không thực sự có thể tìm thấy một câu trả lời đơn giản cho biết nơi để xem và những gì cần thay đổi.

Hy vọng rằng điều này sẽ giúp bất cứ ai. Cảm ơn.


0

Đối với CentOS 7.8 & PHP 7.3

yum install rh-php73-php-mysqlnd

Và sau đó khởi động lại apache / php.


-1

Nếu bạn gặp lỗi như

Lỗi nghiêm trọng: Gọi đến hàm không xác định mysql_connect ()

Vui lòng đăng nhập vào cPanel >> Nhấp vào Chọn phiên bản Php >> chọn phần mở rộng MYSQL


4
Không có gợi ý nào trong câu hỏi rằng OP đang sử dụng CPanel.
Quentin

-3

Phải có một số lỗi cú pháp. Sao chép / dán mã này và xem nó có hoạt động không:

<?php
    $link = mysql_connect('localhost', 'root', '');
    if (!$link) {
        die('Could not connect:' . mysql_error());
    }
    echo 'Connected successfully';
    ?

Tôi đã có cùng một thông báo lỗi. Hóa ra tôi đã sử dụng msql_connect()chức năng thay vì mysql_connect().


OP có hàm không xác định mysql_connect chứ không phải msql_connect nên anh ấy đã không nhập sai như bạn đề xuất.
logicbloke

-3

(Cấu hình mysql của Windows)

Bước 1: Đi tới Bảng điều khiển Apache> Apache> Cấu hình> PHP.ini

Bước 2: Tìm kiếm trong Notepad (Ctrl + F) Đối với: ;extension_dir = ""(có thể nhận xét bằng a ;). Thay dòng này bằng: extension_dir = "C:\php\ext"(bạn không cần bỏ dấu ;ở đầu câu).

Bước 3: Tìm kiếm: extension=php_mysql.dllvà loại bỏ ;từ đầu.

Bước 4: Lưu và Khởi động lại Máy chủ Apache HTTP của bạn. (Trên Windows, điều này thường được thực hiện thông qua giao diện người dùng)

Đó là nó :)

Nếu bạn gặp lỗi thiếu php_mysql.dllcó thể bạn sẽ cần tải xuống tệp này từ trang php.net hoặc pecl.php.net. (Vui lòng cho biết bạn lấy nó từ đâu)

Thông tin thêm về PHP: Cài đặt các tiện ích mở rộng trên Windows - Thủ công


1
Mặc dù điều này có thể đúng đối với Windows, nhưng câu hỏi này được gắn thẻ Ubuntu, điều mà hầu hết chắc chắn không có C:\\phptrên hệ thống.
tadman

@tadman không quan trọng nếu đó là dành cho Ubuntu, nó đã hoạt động với tôi hôm nay sau khi cài đặt mới trên windows.
Ravi Gaurav Pandey

1
@RaviGauravPandey Câu hỏi ban đầu liên quan đến Ubuntu. Vấn đề là nó hoạt động cho bạn trên Windows không phải là vấn đề. Đây là câu trả lời của Windows cho một câu hỏi về Ubuntu.
tadman
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.