2011-12-18 71 views
20

Tôi vừa cài đặt PHP và Apache trên máy tính tại nhà. Khi tôi cố gắng gọi hàm mysql_connect tôi nhận được:Gọi hàm không xác định mysql_connect

fatal error: call to undefined function mysql_connect. 

Tôi đã nạp php.ini nơi tôi có những dòng chú thích extension=php_mysql.dllextension=php_mysqli.dll và thư mục tiện ích thay đổi để extension_dir = "C:\php\ext" - đó là thư mục nơi các tập tin php_mysql.dll và php_mysqli .dll. Làm cách nào để khắc phục sự cố này?

Sản lượng phpinfo(): http://jsfiddle.net/MMTwA/

+2

Bạn đã khởi động lại apache sau khi chỉnh sửa php.ini chưa? :) Và bạn cũng đã cài đặt MySQL chưa? Có lẽ bạn nên có một cái nhìn tại XAMPP (http://www.apachefriends.org/en/xampp-windows.html) mà là một dễ sử dụng gói có chứa apache, php và mysql. – Quasdunk

+0

Có, tôi đã khởi động lại nó. Có, tôi đã cài đặt MySQL mặc dù tôi đã không tôi vẫn sẽ nhận được "chức năng không xác định ...". Có lẽ tôi sẽ xem xét XAMPP đó nếu tôi không giải quyết điều này, cảm ơn. –

+0

Thử sao chép 'libmysql.dll' vào' C: \ Windows \ System32'. Và, một lần nữa, nếu bạn chỉ cần một môi trường phát triển, hãy xem XAMPP. Nó đi kèm với tất cả mọi thứ tích hợp, có một GUI, hoạt động ra khỏi hộp và sẽ giúp bạn tiết kiệm rất nhiều đau đầu (đặc biệt là dưới Windows!). – Quasdunk

Trả lời

15

Sau khi nhìn vào đầu ra phpinfo() của bạn, nó xuất hiện các phần mở rộng mysql không được nạp. Tôi nghi ngờ bạn có thể chỉnh sửa tệp php.ini sai (có thể có nhiều bản sao). Đảm bảo bạn đang chỉnh sửa tệp php tại C: \ php \ php.ini (cũng kiểm tra để đảm bảo không có bản sao thứ hai trong C: \ Windows).

Ngoài ra, bạn nên kiểm tra các bản ghi Apache của bạn cho các lỗi (phải ở trong \ logs \ thư mục trong Apache của bạn cài đặt.

Nếu bạn chưa đọc dưới đây, tôi sẽ có một cái nhìn tại phần ý kiến , bởi vì nó có vẻ như rất nhiều người trải nghiệm quirks với thiết lập này. một vài bình luận đưa ra giải pháp mà họ sử dụng để làm cho nó làm việc.

http://php.net/manual/en/install.windows.extensions.php

một giải pháp chung có vẻ là để sao chép libmysql.dll và php_mysql .dll từ c: \ PHP đến C: \ Windows \ System32.

+0

Tôi đang chỉnh sửa đúng php.ini - tốt khi tôi thử ví dụ để thay đổi display_errors = On to Off sau đó tôi không có thông báo lỗi ... Tôi đã kiểm tra nhật ký apache và tìm thấy có dòng như "PHP Cảnh báo: PHP Startup: Không thể tải thư viện động 'C: \\ php \\ ext \\ php_mysql.dll' - Không thể tìm thấy mô-đun được chỉ định. \ R \ n trong Không xác định trên dòng 0 ". Tôi sẽ xem xét liên kết bạn đã đăng, cảm ơn –

+0

@ NikolasJíša Tôi đã thêm một giải pháp khả thi khác vào câu trả lời của tôi. Hãy thử một lần. (sao chép tệp vào system32) – Bryan

+0

Vẫn không hoạt động:) ... Neverminds cảm ơn vì đã dành thời gian và trợ giúp của bạn, tôi sẽ thử XAMPP vào ngày mai. –

2

Bạn có thể đã quên để khởi động lại apache/wamp/xamp/bất cứ máy chủ web bạn sử dụng, bạn cần phải làm điều đó để làm cho nó hoạt

+0

Đã thực hiện điều đó nhờ lời khuyên của bạn anyway. –

3

Thông tin cơ bản về vấn đề (tương tự) của tôi:

Tôi đã được yêu cầu sửa một dự án PHP, sử dụng các thẻ ngắn. PHP.ini của máy chủ WAMP của tôi có short_open_tag = off. Để chạy dự án lần đầu tiên, tôi đã sửa đổi cài đặt này thành short_open_tag = off.

PROBLEM Bề mặt: Ngay sau khi thay đổi này, tất cả các cuộc gọi mysql_connect() của tôi đều không thành công. Nó đã ném một lỗi

fatal error: call to undefined function mysql_connect.

Giải pháp: Chỉ cần đặt short_open_tag = off.

0

Một lần tôi gặp sự cố khi sử dụng Off thay vì off. Và cũng kiểm tra các miếng đệm một lần nữa ... Con đường phải chính xác. Ngoài ra, hãy thêm dòng sau vào biến môi trường của bạn.

C:\your-apache-path\bin; C:\your-php-path\bin;C:\your-mysql-path\bin 

Nếu bạn đang dùng Windows, nhấn chuột phải My Computer , chọn Properties, và điều hướng đến nâng cao tab ... (là Windows   7). Nhấp vào Cài đặt hệ thống nâng cao trước rồi chọn tab Nâng cao và sau đó Biến môi trường. Chọn PATH và nhấp vào Chỉnh sửa. Tạo một bản sao của chuỗi trong a.file txt để sao lưu (nó có thể là trống) --- thiết lập các biến môi trường của bạn ... Đăng xuất và đăng nhập lại.

1

Hi Tôi đã nhận lỗi này bởi vì tôi còn lại ra dấu và (&) trong

; php.ini 
error_reporting = E_ALL & ~E_DEPRECATED 
3

Máy tính của tôi đang chạy Windows 7 (Apache 2.2 & PHP 5.2.17 & MySQL 5.0.51a), cú pháp trong tệp "httpd.conf" (C: \ Program Files (x86) \ Apache Software Foundation \ Apache2 .2 \ conf \ httpd.conf) nhạy cảm với dấu gạch chéo. Bạn có thể kiểm tra xem "php.ini" có được đọc từ đúng thư mục hay không. Chỉ cần gõ vào trình duyệt của bạn "localhost/index.php". Các quy tắc ứng index.php như sau:

<?php echo phpinfo(); ?>

Có hàng (không xa từ trên xuống) được gọi là "Loaded Configuration File". Vì vậy, nếu không có gì được thêm vào, thì vấn đề có thể là "php.ini" của bạn không được đọc, thậm chí bạn không được chú ý (extension = php_mysql.dll và extension = php_mysqli.dll). Vì vậy, để làm cho nó hoạt động, tôi đã làm theo các bước sau. Tôi cần phải thay đổi từ

PHPIniDir 'c:\PHP\'

để

PHPIniDir 'c:\PHP'

Pay sự chú ý rằng dấu gạch chéo cuối cùng bị xáo trộn tất cả mọi thứ!

Bây giờ hàng "Tệp cấu hình được tải" được "C: \ PHP \ php.ini" sau khi làm mới "localhost/index.php" (trước khi tôi khởi động lại Apache2.2) cũng như khối mysql ở đó. MySQL và PHP đang làm việc cùng nhau!

+0

cảm ơn, đó là nó! Tôi thậm chí không có dòng trong tập tin của tôi – Dennis

0

Sau khi thay đổi php.ini của chúng tôi, hãy đảm bảo khởi động lại máy chủ web Apache.

2

Kiểm tra php.ini của bạn, tôi đang sử dụng Apache2.2 + php 5.3. và tôi đã có cùng một vấn đề và sau khi sửa đổi php.ini để thiết lập thư mục thư viện của PHP, nó hoạt động chính xác. Vấn đề là giá trị cấu hình mặc định là extension_dir.

Giá trị mặc định (và SAI) giá trị so với môi trường công việc của tôi là

; extension_dir="ext" 

mà không cần bất kỳ đường dẫn đầy đủ và nhận xét bằng dấu chấm phẩy.

Có hai giải pháp phù hợp với tôi.

1. Bao gồm dòng này vào tập tin php.ini

extension_dir="X:/[PathToYourPHPDirectory]/ext 

đâu X: là instalation của bạn ký tự ổ đĩa (thường là C: hay D:)

2. Bạn có thể cố gắng đơn giản bỏ ghi chú, xóa dấu chấm phẩy. Bao gồm dòng tiếp theo tại tệp php.ini

extension_dir="ext" 

Cả hai cách đều hoạt động tốt cho tôi nhưng chọn của bạn. Đừng quên khởi động lại Apache trước khi thử lại.

Tôi hy vọng điều này sẽ giúp bạn.

+0

Tôi mất một thời gian trên các cửa sổ trước khi đọc nhận xét cho các tiện ích. Cảm ơn – Sauleil

0

Chỉ để tham khảo trong tương lai, sao chép tất cả các tệp mở rộng này vào Windows/System hoặc Windows/System32 là không cần thiết.

Tất cả những gì được yêu cầu là bản sao của tệp php.ini bạn chỉnh sửa trong thư mục PHP để sao chép vào thư mục gốc của Windows.

phpinfo sẽ giải thích rõ ràng dưới đây: Cấu hình File (php.ini) Đường dẫn C: \ Windows

cảm giác logic sẽ giải thích php mà muốn tải một cấu hình nằm trong thư mục Windows. :-)

1

Đảm bảo bạn đã chỉnh sửa php.ini trong thư mục/php, tôi mất cả ngày để phát hiện lỗi và cuối cùng tôi thấy mình đã chỉnh sửa php.ini ở vị trí sai.

0

Vì mysql_connect Tiện ích mở rộng này đã không được chấp nhận trong PHP 5.5.0 và được xóa trong PHP 7.0.0. Thay vào đó, nên sử dụng phần mở rộng MySQLi hoặc PDO_MySQL. theo mặc định xampp không tải nó tự động

trong file php.ini của bạn, bạn nên bỏ ghi chú

;; extension=php_mysql.dll 

để

extension=php_mysql.dll 

Sau đó khởi động lại apache của bạn, bạn cần sử dụng tốt

+0

Tôi đã thử cách này và nó có vẻ hoạt động tốt. Không biết tại sao ai đó cho điểm xuống! – Phuong

-1

tôi nghĩ rằng bạn nên sử dụng mysqli_connect thay vì mysql_connect

+3

Bạn đang ngay hôm nay, tuy nhiên tại thời điểm câu hỏi đã được hỏi 'mysql_query' thậm chí không được chấp nhận – malarzm

+1

Vui lòng mở rộng câu trả lời của bạn. – cybermonkey

0

Vấn đề tương tự này đã khiến tôi phát điên (Windows 10, Apache 2.4, MySql 5.7). Đối với một số lý do (có khả năng PATH liên quan), các .dll sẽ không tải sau khi bỏ ghi chú các tập tin exension chính xác và extension_dir = "ext" trong php.ini. Sau khi thử nhiều thứ, tôi chỉ đơn giản thay đổi "ext" để sử dụng đường dẫn thư mục đầy đủ. Ví dụ. extension_dir = "c:/phpinstall/ext" và nó hoạt động.

Các vấn đề liên quan