정의되지 않은 함수 mysql_connect ()


83

실행 aptitude install php5-mysql(및 MySQL / Apache 2 다시 시작)했지만 여전히이 오류가 발생합니다.

치명적인 오류 : 21 번째 줄의 /home/validate.php에서 정의되지 않은 함수 mysql_connect () 호출

phpinfo() /etc/php5/apache2/conf.d/pdo_mysql.ini 파일이 구문 분석되었다고 말합니다.


다른 내장 PHP / MySql 함수는 어떻습니까? 그들이 일하니?
— samayo dec

잘못된 사용자 / 패스를 입력하려고했는데 'or die'문이 표시되지 않기 때문일 수 있습니다.
— user1765369 dec.

답변:


53

음, 이것이 당신의 기회입니다! PDO 가 준비된 것 같습니다 . 대신 사용하십시오.

PHP MySQL 확장 모듈이로드되고 있는지 확인하십시오.

<?php
    phpinfo();
?>

없는 경우 php.ini파일에 다음을 추가 하십시오.

extension=php_mysql.dll

이것이 데이터베이스에 연결하는 더 좋은 방법입니까? 나는 그것을 조사 할 것이지만 나는 새로운 서버로 옮길 때까지 이전에 작동했던 것처럼 이것을 먼저 작동시키고 싶습니다.
— user1765369 dec.

2
그것은. mysql_*함수는 위험하며 PHP 4.1부터 폐기되었습니다. Apache 오류 로그를 확인하고 서버를 다시 시작하십시오. 작동합니까?
— wanovak

xampp를 사용하고 있습니다. php.ini에 해당 줄을 추가 한 후 apache error.log에 다음 메시지가 표시됩니다. Unable to load dynamic library '\\ xampp \\ php \\ ext \\ php_mysql.dll
— bigpony

1
@defmx .dll 파일이 해당 경로에 있습니까? 그렇지 않은 경우 설치해야합니다.
— wanovak

65

이미 PHP7을 사용하는 경우 이전에 사용되지 않는 함수 mysql_*가 완전히 제거되었으므로 mysqli_*대신 PDO 함수 또는 함수를 사용하여 코드를 업데이트해야합니다 .

가능하지 않은 경우 해결 방법으로 -functions : fix_mysql.inc.php 를 사용하여 이전 mysql_*함수 를 다시 만드는 작은 PHP 포함 파일을 만들었습니다 mysqli_*().


1
내 경우에 대한 완벽한 솔루션, 아직 업그레이드하고 기존 코드를 모두 깰 수는 없습니다. 그러나 파일의 전역 $ con 변수는 포함 된 파일이 생성자가 포함 된 상위 클래스의 전역 변수를 읽을 수 없기 때문에 문제였습니다. 그러나 필요한 경우 포함 된 파일의 함수 내에 연결 변수를 간단히 만들었습니다. 이제 내 코드가 잘 작동합니다. 감사합니다.
— zeeshan

이것은 새로운 서버 플랫폼에서 이전 코드베이스를 다시 실행하는 데 매우 유용했습니다. 건배!
— mxmader

4
덕분에 ..이 제품이 고장 php7와 PHP5 응용 프로그램에 업그레이드 된 내 인생 저장
— geekonweb을

이것은 오래된 PHP 응용 프로그램을 업그레이드하는 데 드는 시간을 절약 할 수있는 훌륭한 해결 방법입니다. 감사합니다.
— Joel Karunungan

감사합니다 @ ubo77. 레거시 코드베이스에서 약간의 골칫거리를 절약했습니다.
— mikoop

57

우분투로 태그를 지정하셨습니다. 대부분의 경우 MySQL 드라이버 (및 가능하면 MySQL)가 설치되어 있지 않습니다. SSH 또는 터미널 액세스 및 sudo 권한 이 있다고 가정 하고 서버에 로그인하고 다음을 실행하십시오.

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

MySQL 패키지 또는 php5-mysql 패키지가 이미 설치되어있는 경우 업데이트됩니다.


최신 정보

이 답변은 여전히 ​​가끔 클릭을 받기 때문에 PHP 7 을 포함하도록 업데이트하겠습니다 . PHP 7에는 MySQL 용 다른 패키지가 필요하므로 apt-get 명령에 다른 인수를 사용하는 것이 좋습니다.

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

그리고 중요한 것은 mysql_connect()PHP v5.5.0 이후로 더 이상 사용되지 않습니다. 여기 공식 문서를 참조하십시오 : PHP : mysql_connect ()


나는 패키지 php7.0을 찾을 수 없습니다 얻을
— strangetimes

7.0을 7.3으로 대체
— rubo77

46

누군가가 docker php official images 문제로 여기에 온 경우 docker 컨테이너 내부에 아래 명령을 입력하십시오.

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

자세한 내용은 위의 링크를 참조하세요 How to install more PHP extensions(하지만 조금 어렵습니다 ...).

또는이 문서가 도움이 될 수 있습니다.

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


4
mysql내가 원하는 것입니다
— deFreitas

17

또한 정의되지 않은 MySQL_connect ()와 동일한 문제가 발생했습니다. PHP.ini 파일을 변경하려고 시도했지만 동일한 오류가 발생했습니다. 그런 다음이 솔루션에 와서 내 코드를 감가 상각 된 PHP 함수에서 새 함수로 변경했습니다.

$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.

이 정보가 도움이되기를 바랍니다. 이 솔루션은 저에게 올바르게 작동합니다.

편집하다:

이전 PHP에서 업그레이드하는 경우 다음을 수행해야합니다. apt-get install php7.0-mysql



6

시험:

<?php
  phpinfo();
?>

페이지를 실행하고 mysql. 찾을 수없는 경우 셸에서 다음을 실행하고 Apache 서버를 다시 시작합니다.

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

또한 apache2.conf (또는 conf.d / php.ini) 파일의 어딘가에 다음 줄이 주석 처리되지 않았는지 확인하십시오.

;extension=php_mysql.so

...에

extension=php_mysql.so

4

내 생각 엔 PHP 설치가 MySQL 지원으로 컴파일되지 않았습니다.

구성 명령 ( php -i | grep mysql)을 확인하십시오 . 와 같은 것을 볼 수 '--with-mysql=shared,/usr'있습니다.

http://php.net/manual/en/mysql.installation.php 에서 전체 지침을 확인할 수 있습니다 . 그러나 @wanovak에서 제안한 솔루션을 사용하고 싶습니다.

그래도 PDO를 사용하려면 MySQL 지원이 필요하다고 생각합니다.


1

질문에는로 태그가 지정되어 ubuntu있지만 주석을 해제하는 솔루션은 extension=mysqli.dll창에 따라 다릅니다. 나는 여기서 혼란스러워?!, 어쨌든, 먼저 실행 <? php phpinfo ?>하고 제목 mysql*아래를 검색하십시오 Configuration. 그런 것이 보이지 않는다면을 설치하거나 활성화하지 않았 음을 의미합니다 php-mysql. 그래서 먼저 설치php-mysql

sudo apt get install php-mysql

이 명령은 이미 설치된 php-mysql에 따라 php설치되므로 버전에 대해 걱정할 필요가 없습니다 !!.

그런 다음 유닉스 특정 솔루션이 제공되며 php.ini파일에서 줄의 주석 처리를 제거하십시오.

extension=msql.so

, ELSEmsql.so 에 있는지 확인/usr/lib/php/<timestamp_folder>

extension=path/to/msql.so

그런 다음 마지막으로 apache및 mysql서비스를 다시 시작하면 제목 mysql아래 섹션이 표시됩니다 Configrations.phpinfo page


0

작업중인 프로젝트가 php 5.6에서 개발되었고 설치 후 프로젝트가 php7.1에서 실행되지 않았기 때문에이 오류가 발생했습니다.

ubuntu / nginx와 함께 Vagrant를 사용하는 사람을 위해 nginx 디렉토리 (/ etc / nginx /)에 "sites-available"이라는 디렉토리가 있으며 여기에는 vagrant maschine에 대해 구성된 url과 같은 이름의 파일이 있습니다. 제 경우에는 homestead.app이었습니다. 이 파일에는 다음과 같은 내용이 있습니다.

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

거기에서 특정 사이트에 대해 원하는 PHP 버전을 변경할 수 있습니다.

이것을 Google로 검색했지만 어디를보고 무엇을 바꿀 것인지에 대한 간단한 대답을 찾을 수 없었습니다.

이것이 누구에게나 도움이되기를 바랍니다. 감사.


0

CentOS 7.8 및 PHP 7.3의 경우

yum install rh-php73-php-mysqlnd

그런 다음 apache / php를 다시 시작하십시오.


-1

오류가 발생하는 경우

치명적인 오류 : 정의되지 않은 함수 mysql_connect () 호출

의 cPanel에 친절 로그인 >> 선택 PHP 버전을 클릭 >> 확장 MYSQL을 선택


4
OP가 CPanel을 사용하고 있다는 질문에는 제안이 없습니다.
— Quentin

-3

구문 오류가 있어야합니다. 이 코드를 복사 / 붙여 넣기하고 작동하는지 확인하십시오.

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

동일한 오류 메시지가 표시되었습니다. msql_connect()대신 함수를 사용하고 있었던 것으로 밝혀졌습니다 mysql_connect().


OP에는 정의되지 않은 mysql_connect 함수가 있고 msql_connect가 아니므로 제안한대로 잘못 입력하지 않았습니다.
— logicbloke

-3

(Windows mysql 구성)

1 단계 : Apache 제어판> Apache> 구성> PHP.ini로 이동합니다.

2 단계 : 메모장에서 검색 (Ctrl + F) For : ;extension_dir = ""(으로 주석 처리 가능 ;). 이 줄을 다음으로 바꿉니다. extension_dir = "C:\php\ext"( ;문장 시작 부분에서 를 제거 할 필요가 없습니다 ).

3 단계 : 검색 : 시작 부분을 extension=php_mysql.dll제거합니다 ;.

4 단계 : Apache HTTP Server를 저장하고 다시 시작합니다. (Windows에서는 일반적으로 UI를 통해 수행됨)

그게 다야 :)

누락에 대한 오류가 발생 php_mysql.dll하면 php.net 사이트 또는 pecl.php.net에서이 파일을 다운로드해야합니다. (어디에서 얻을 수 있는지에 대해주의하십시오)

PHP에 대한 추가 정보 : Windows에 확장 설치-Manual


1
이 질문은 Windows에 맞을 수 있지만이 질문은 Ubuntu로 태그가 지정 C:\\php되어 있으며 시스템 에는 없습니다 .
— tadman

@tadman은 Ubuntu의 경우 중요하지 않으며 Windows에 새로 설치 한 후 오늘 저에게 효과적이었습니다.
— Ravi Gaurav Pandey

1
@RaviGauravPandey 원래 질문은 Ubuntu와 관련이 있습니다. Windows에서 작동한다는 것이 요점이 아닙니다. 이것은 Ubuntu 질문에 대한 Windows 답변입니다.
— tadman
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.