Đã dành thời gian khắc phục sự cố khi một ứng dụng web PHP/MySQL gặp sự cố khi kết nối với cơ sở dữ liệu. Cơ sở dữ liệu có thể được truy cập từ trình bao và phpMyAdmin với cùng một thông tin xác thực và nó không có ý nghĩa.
Hóa ra mật khẩu đã có một dấu $ trong đó:
$_DB["password"] = "mypas$word";
Mật khẩu được gửi đi là "mypas" mà rõ ràng là sai.
Cách tốt nhất để xử lý vấn đề này là gì? Tôi đã thoát $ bằng một \
$_DB["password"] = "mypas\$word";
và nó hoạt động.
Tôi thường sử dụng $string = 'test'
cho các chuỗi có lẽ là cách tôi tránh chạy vào điều này trước đây.
Hành vi này có đúng không? Điều gì nếu mật khẩu này được lưu trữ trong một cơ sở dữ liệu và PHP kéo nó ra - liệu vấn đề này có xảy ra không? Tôi đang thiếu gì ở đây ...
Cảm ơn câu trả lời của bạn. Nó xuất hiện đây là một vấn đề của thực hành tốt nhất. Với báo cáo lỗi nghiêm ngặt, điều này có thể đã được chọn nhanh hơn. Từ câu hỏi ban đầu của tôi - đây có phải là vấn đề khi lấy mật khẩu từ cơ sở dữ liệu hay PHP thoát khỏi ký hiệu $? – ncatnow
@ncatnow: nó không thể là một vấn đề bởi vì thay thế chỉ được thực hiện trong chuỗi trích dẫn đôi ("chuỗi"). Khi bạn đọc một chuỗi từ cơ sở dữ liệu, nó được đọc nội bộ bởi PHP, do đó bạn không sử dụng các chuỗi được trích dẫn kép để đặt nó (hoặc thậm chí là các trích dẫn đơn). Hãy tưởng tượng trình biên dịch thay thế tất cả các công cụ $ ** ngay trước khi thiết lập biến. –
Nó chỉ là một vấn đề cho chuỗi được viết trực tiếp trong mã nguồn của bạn, sử dụng dấu ngoặc kép. Chúng phải xuất hiện vật lý "" như $ this "' trong tệp nguồn '.php'. Các chuỗi từ cơ sở dữ liệu, từ một tệp, từ người dùng, v.v., không phụ thuộc vào nội suy. –