Tôi biết có một loạt các câu hỏi tương tự, trên thực tế tôi đã đọc tất cả (9) trong số chúng.PHP 5.4 PDO không thể kết nối với MySQL 4.1+ bằng cách sử dụng xác thực không an toàn cũ
Tuy nhiên, không ai trong số họ giải quyết được sự cố của tôi.
Tôi có gói lưu trữ được chia sẻ (tối thiểu). Những gì được bao gồm trong gói của tôi là tên miền, và một địa chỉ IP riêng biệt, nơi máy chủ MySQL được lưu trữ. Để phát triển, tôi đang sử dụng http://localhost/
với máy chủ phát triển PHP 5.4 và tôi đang sử dụng máy chủ MySQL tôi nhận được trong gói lưu trữ của mình.
Sự cố chỉ phát sinh trên PC của tôi, vì tôi đã cài đặt PHP 5.4, nhưng máy chủ web của tôi đã cài đặt PHP 5.2.17 và sẽ không nâng cấp. Máy chủ MySQL nằm trên MySQL 5.1.50.
May mắn thay, phpMyAdmin có tính năng "Thay đổi mật khẩu" được tích hợp sẵn.
Có hai lựa chọn băm trong phpMyAdmin để thay đổi mật khẩu:
- MySQL 4.1+
- MySQL 4.0 tương thích
Tôi đã thay đổi mật khẩu với các tùy chọn MySQL 4.1 trở lên, và nó xác nhận bản cập nhật đã thành công.
Tiểu sử đã được cập nhật.
SET PASSWORD = PASSWORD('***')
Tuy nhiên, khi tôi thực hiện truy vấn này:
SELECT @@global.old_passwords, @@session.old_passwords, Length(PASSWORD('abc'));
Nó nói với tôi độ dài mật khẩu vẫn là 16. Output:
1 1 16
Và vì vậy vấn đề vẫn tồn tại.
Không thể kết nối với cơ sở dữ liệu. SQLSTATE [HY000] [2000] mysqlnd không thể kết nối với MySQL 4.1+ bằng cách sử dụng xác thực không an toàn cũ. Vui lòng sử dụng công cụ quản trị để đặt lại mật khẩu của bạn bằng lệnh SET PASSWORD = PASSWORD ('your_existing_password'). Điều này sẽ lưu trữ một giá trị băm mới và an toàn hơn trong mysql.user. Nếu người dùng này được sử dụng trong các tập lệnh khác được thực thi bởi PHP 5.2 trở lên, bạn có thể cần phải xóa cờ cũ-mật khẩu khỏi tệp my.cnf của mình
Tôi cũng đã cố gắng thực hiện các truy vấn này, khi đăng nhập bằng người dùng dBO trong phpMyAdmin:
SET SESSION old_passwords=0;
[phpMyAdmin reloads to the home screen, but the value remains = 1]
SET GLOBAL old_passwords = 0;
#1227 - Access denied; you need the SUPER privilege for this operation
FLUSH PRIVILEGES;
#1227 - Access denied; you need the RELOAD privilege for this operation
Đây là mâu thuẫn với những gì được nêu trong menu của webhost cho việc thiết lập người dùng dBO:
Database Owner
Khi bạn tạo một cơ sở dữ liệu mới, y Bạn cần phải chỉ định Người dùng cơ sở dữ liệu (DBO), sẽ có
toàn quyền truy cập quản trị viên vào cơ sở dữ liệu.
Đây có phải là điều tôi phải thực hiện với các máy chủ web của mình không? Hoặc nó có thể được giải quyết bởi người dùng DBO của tôi? Nếu không thì điều này có thể được bỏ qua trong PHP? (vì nó hoạt động với PHP 5.2.17 nhưng không phải PHP 5.4)
Chúng bị kẹt trên PHP 5.2.17 (2011-01-06) và MySQL 5.1.50 (2010-08-03) và sẽ không nâng cấp? Tôi muốn nói di chuyển đến một máy chủ mới. Nhưng bất chấp điều đó, bạn nên luôn luôn phát triển và thử nghiệm cục bộ với các phiên bản tương tự mà bạn triển khai, để tránh loại vấn đề này. –