정의되지 않은 함수 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

그런 다음 마지막으로 apachemysql서비스를 다시 시작하면 제목 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.