PHP có chỉ hoạt động với mysql không
Có cần sử dụng PHP để kết nối với MySQL không?
Khi nói đến việc kết nối với cơ sở dữ liệu MySQL, PHP cung cấp một giải pháp thuận tiện và hiệu quả. Với PHP, bạn không cần tải xuống mã bổ sung hoặc cài đặt plugin để kết nối với MySQL. Trên thực tế, PHP đã sẵn sàng kết nối với MySQL ngay lập tức, làm cho nó trở thành một công cụ mạnh mẽ để kết nối cơ sở dữ liệu.
Kết nối PHP với MySQL cũng đơn giản như sau một vài bước:
- Kết nối với cài đặt MySQL.
- Sử dụng đúng cơ sở dữ liệu MySQL.
- Gửi truy vấn SQL đến cơ sở dữ liệu.
- Lấy và xử lý các kết quả.
Các bước này đóng vai trò là nền tảng cho bất kỳ tập lệnh PHP nào tương tác với cơ sở dữ liệu. Cho dù bạn đang tạo bảng, thực hiện tìm kiếm hay thêm dữ liệu vào cơ sở dữ liệu, hai bước đầu tiên vẫn không đổi.
Chúng ta hãy xem xét kỹ hơn quá trình kết nối với cơ sở dữ liệu MySQL trong PHP:
Để thiết lập kết nối, tập lệnh PHP của bạn cần biết máy chủ, tên người dùng và mật khẩu của cơ sở dữ liệu. Thông tin này cho phép PHP bắt đầu kết nối giống như bạn khi sử dụng máy khách dòng lệnh MySQL.
Bắt đầu bằng cách tạo tập lệnh PHP mới có tên là “Kết nối.PHP “và nhập các dòng sau:
Lưu ý rằng nếu cơ sở dữ liệu của bạn đang chạy trên cùng một máy với các tệp phục vụ PHP và web của bạn, tên máy chủ cơ sở dữ liệu thường sẽ là “localhost.”
Lệnh “mysql_connect” lấy trong máy chủ, tên người dùng và mật khẩu cơ sở dữ liệu làm tham số và khởi tạo kết nối. Nếu kết nối không thành công, hàm “Die” được sử dụng để hiển thị thông báo lỗi để ngăn tập lệnh tiếp tục. Nếu không, tập lệnh hiển thị thông báo kết nối thành công.
Bằng cách làm theo các bước này, bạn có thể dễ dàng kết nối PHP với cơ sở dữ liệu MySQL và tận dụng sức mạnh của MySQL trong các ứng dụng web của bạn.
Các câu hỏi thường gặp:
1. Tại sao thật thuận tiện khi sử dụng PHP để kết nối với MySQL?
PHP sẵn sàng kết nối với MySQL mà không cần thêm mã hoặc plugin. Sự tiện lợi này giúp tiết kiệm thời gian và công sức khi xây dựng các ứng dụng web yêu cầu kết nối cơ sở dữ liệu.
2. Tôi có thể sử dụng PHP để kết nối với cơ sở dữ liệu MySQL từ xa không?
Có, PHP cho phép bạn kết nối với cơ sở dữ liệu MySQL từ xa bằng cách cung cấp máy chủ, tên người dùng và mật khẩu phù hợp. Chỉ cần đảm bảo rằng bạn có quyền truy cập cần thiết và kết nối mạng để thiết lập kết nối.
3. Các bước thiết yếu để kết nối PHP với MySQL là gì?
Các bước thiết yếu để kết nối PHP với MySQL bao gồm cung cấp máy chủ cơ sở dữ liệu, tên người dùng và mật khẩu, thiết lập kết nối với lệnh “mysql_connect” và xử lý các lỗi tiềm năng bằng cách sử dụng chức năng “Die”. Sau khi kết nối, bạn có thể thực hiện các truy vấn SQL và xử lý các kết quả đã trả về.
4. Có thể sử dụng PHP để kết nối với cơ sở dữ liệu khác với MySQL không?
Có, PHP hỗ trợ các kết nối đến các cơ sở dữ liệu khác nhau ngoài MySQL, bao gồm PostgreSQL, Oracle và Microsoft SQL Server. Tuy nhiên, các bước và chức năng cụ thể có thể thay đổi tùy thuộc vào hệ thống cơ sở dữ liệu bạn đang kết nối với.
5. Làm thế nào an toàn để kết nối php với mysql?
Bảo mật trong kết nối cơ sở dữ liệu phụ thuộc vào một số yếu tố như bảo mật đúng môi trường máy chủ, sử dụng mật khẩu mạnh và sử dụng các thực tiễn tốt nhất để bảo vệ dữ liệu nhạy cảm. Bản thân PHP cung cấp các chức năng và kỹ thuật để ngăn ngừa tiêm SQL và các lỗ hổng bảo mật khác, nhưng các nhà phát triển cũng phải thực hiện các biện pháp bảo mật bổ sung để đảm bảo bảo mật chung của ứng dụng.
6. Có thể nhiều tập lệnh PHP kết nối với cùng một cơ sở dữ liệu MySQL?
Có, nhiều tập lệnh PHP có thể kết nối đồng thời với cùng một cơ sở dữ liệu MySQL. Tuy nhiên, điều quan trọng là quản lý các kết nối và tài nguyên một cách hiệu quả để ngăn chặn các vấn đề xung đột và hiệu suất. Đóng kết nối cơ sở dữ liệu và sử dụng các kỹ thuật gộp kết nối có thể giúp tối ưu hóa quyền truy cập cơ sở dữ liệu trong môi trường đa chữ.
7. Làm cách nào tôi có thể khắc phục lỗi kết nối khi sử dụng PHP và MySQL?
Khi gặp lỗi kết nối, hãy kiểm tra máy chủ được cung cấp, tên người dùng và mật khẩu để đảm bảo độ chính xác của chúng. Xác minh rằng máy chủ MySQL đang chạy và có thể truy cập từ môi trường PHP. Báo cáo lỗi cũng có thể được bật trong PHP để cung cấp các thông báo lỗi chi tiết hơn, giúp khắc phục sự cố và giải quyết các vấn đề kết nối.
số 8. Có thể kết nối PHP với nhiều cơ sở dữ liệu MySQL không?
Có, PHP cho phép bạn kết nối với nhiều cơ sở dữ liệu MySQL trong cùng một tập lệnh hoặc trên các tập lệnh khác nhau. Chỉ cần thiết lập các kết nối riêng biệt bằng cách sử dụng các tham số khác nhau cho mỗi cơ sở dữ liệu. Hãy nhớ rằng việc quản lý nhiều kết nối hiệu quả là rất quan trọng để duy trì hiệu suất và sử dụng tài nguyên.
9. Tôi có thể sử dụng các câu lệnh được chuẩn bị PHP với mysql không?
Có, PHP hỗ trợ các câu lệnh đã chuẩn bị, cung cấp một cách an toàn và hiệu quả để thực hiện các truy vấn SQL với dữ liệu do người dùng cung cấp. Các câu lệnh được chuẩn bị giúp ngăn chặn các cuộc tấn công tiêm SQL bằng cách tách logic truy vấn khỏi đầu vào dữ liệu.
10. Có bất kỳ lựa chọn thay thế nào cho PHP để kết nối với MySQL?
Mặc dù PHP là một lựa chọn phổ biến để kết nối với MySQL do tính đơn giản và áp dụng rộng rãi, các ngôn ngữ lập trình khác như Python, Java và C# cũng cung cấp các thư viện và API để tương tác với cơ sở dữ liệu MySQL. Việc lựa chọn ngôn ngữ phụ thuộc vào các yêu cầu và sở thích của dự án.
Có cần sử dụng PHP để kết nối với MySQL không
Các hằng số được gõ vào các chữ cái kháng thể. Mũ aren’t yêu cầu, nhưng nó’là một trong những người khác “Nói như một lập trình viên PHP” đồ đạc. Bạn muốn các hằng số trông khác với các biến và sử dụng tất cả các tên chữ hoa là một cách để làm điều đó. Các hằng số cũng không’t có $ trước tên của họ, đó là một cách khác để phân biệt hằng số với biến.
PHP & MySQL: Hướng dẫn mất tích của Brett McLaughlin
Nhận toàn bộ quyền truy cập vào PHP & MySQL: Hướng dẫn thiếu và 60k+ các tựa game khác, với bản dùng thử 10 ngày miễn phí của O’Reilly.
Ngoài ra còn có các sự kiện trực tiếp, các khóa học được quản lý bởi vai trò công việc, và nhiều hơn nữa.
Chương 4. Kết nối PHP với MySQL
Bây giờ bạn’đã thấy một chút sức mạnh của cả php và mysql, nó’thời gian để mang hai juggernauts này lại với nhau. Với nhiều ngôn ngữ lập trình, bất cứ lúc nào bạn muốn nói chuyện với cơ sở dữ liệu, bạn phải tải xuống và cài đặt thêm mã hoặc cài đặt các mô hình trình cắm nhỏ cung cấp cho các chương trình của bạn để nói chuyện với cơ sở dữ liệu đó. PHP isn’T như vậy mặc dù; nó đã sẵn sàng để kết nối với mysql từ thời điểm bạn chạy PHP yêu cầu.
Mặc dù bạn’chỉ gần đây bắt đầu hành trình của bạn để làm chủ php, bạn’RED Sẵn sàng sử dụng cơ sở dữ liệu từ tập lệnh của bạn. Bạn chỉ cần tìm hiểu một vài lệnh mới và cách giải quyết các vấn đề có thể xảy ra khi bạn’Re làm việc với cơ sở dữ liệu. Trong thực tế, bạn’RE sẽ xây dựng một hình thức đơn giản cho phép bạn nhập SQL và chạy nó vào cơ sở dữ liệu MySQL của bạn. Khi bạn’lại một lập trình viên PHP, bạn có thể vượt ra ngoài mysql Công cụ dòng lệnh.
Sau đó, để đặt một quả anh đào lên trên sundae cao chót’sẽ viết kịch bản khác. Kịch bản này sẽ lấy tất cả thông tin từ các biểu mẫu bạn’Ve được xây dựng, thêm thông tin đó vào cơ sở dữ liệu và sau đó thêm một biểu mẫu nữa để cho người dùng của bạn tìm kiếm người dùng khác bằng tên. Tất cả điều đó trong một chương? Có thực sự.
Viết tập lệnh kết nối PHP đơn giản
Cho dù đơn giản hay nâng cao các tập lệnh PHP của bạn, nếu họ nói chuyện với cơ sở dữ liệu, họ’sẽ bắt đầu với cùng một vài bước:
- Kết nối với cài đặt MySQL.
- SỬ DỤNG Cơ sở dữ liệu MySQL phù hợp.
- Gửi SQL đến cơ sở dữ liệu.
- Lấy lại kết quả.
- Làm điều gì đó với kết quả.
Các bước 3, 4 và 5 sẽ thay đổi tùy thuộc vào những gì bạn’Re đang làm. Một tập lệnh tạo ra các bảng trông hơi khác so với tập lệnh tìm kiếm thông qua các bảng hiện có.
Nhưng một vài bước đầu tiên đó kết nối với MySQL và sử dụng cơ sở dữ liệu phù hợp luôn luôn giống nhau, bất kể kịch bản của bạn có ưa thích như thế nào. Chỉ cần nghĩ, sau đó: mã bạn’Re sắp viết là mã tương tự mà các lập trình viên kiếm được 150 đô la hoặc 200 đô la một giờ đang viết ở đâu đó. (Họ’RE chỉ viết mã đó trong những ngôi nhà huyền ảo với robot phục vụ họ trà đá khi họ ngồi bên hồ bơi.)
Kết nối với cơ sở dữ liệu MySQL
Đầu tiên, bạn phải nói với tập lệnh PHP của mình cách kết nối với cơ sở dữ liệu. Quá trình này về cơ bản đang nói với PHP làm những gì bạn đã làm khi bạn bắt đầu máy khách dòng lệnh MySQL của mình (MySQL trên Mac OS X). Khi bạn kết nối với máy chủ web của mình’Cơ sở dữ liệu S, bạn có thể đã sử dụng một lệnh như followng:
bmclaugh@akila: ~ $ mysql-host = dc2-mysql-02.Kattare.com --user = bmclaugh -password
Bạn cần những thông tin tương tự để cung cấp cho PHP để nó có thể kết nối: máy chủ cơ sở dữ liệu của bạn, tên người dùng và mật khẩu của bạn.
Bắn lên trình chỉnh sửa văn bản của bạn và tạo một tập lệnh mới; gọi nó đi kết nối.PHP . Tập lệnh này sẽ đơn giản nhất có thể, bởi vì tất cả những gì bạn cần làm là kết nối với cơ sở dữ liệu của bạn, SỬ DỤNG Cơ sở dữ liệu phù hợp, sau đó chạy truy vấn SQL mẫu để đảm bảo mọi thứ đang hoạt động chính xác.
Trong tập lệnh của bạn, hãy nhập các dòng sau:
Lỗi kết nối với cơ sở dữ liệu: " . mysql_error () . ""); Echo"Kết nối với mysql!
"; ?>
Ghi chú
nếu bạn’RE chạy cơ sở dữ liệu của bạn trên cùng một máy với các tệp phục vụ PHP và web của bạn, tên máy chủ cơ sở dữ liệu của bạn thường là Localhost. Localhost chỉ là một cách để nói “máy địa phương.”
Nó’S thực sự đơn giản! Và giống như hầu hết các tập lệnh PHP khác bạn’đã viết, mặc dù có một số lệnh mới, có lẽ bạn đã biết gần như chính xác’S sẽ tiếp tục ở đây.
Đầu tiên, ở đó’S một lệnh mới: mysql_connect . Lệnh này chỉ đơn giản là vào máy chủ cơ sở dữ liệu, tên người dùng và mật khẩu và kết nối. Nó’S chính xác như thể bạn’Re chạy của bạn mysql công cụ và kết nối với cơ sở dữ liệu từ xa.
Ghi chú
Hãy chắc chắn rằng bạn thay đổi của bạn.cơ sở dữ liệu.máy chủ, tên của bạn , Và mật khẩu của bạn đến các giá trị cho cơ sở dữ liệu của riêng bạn.
Nhưng những gì về chết chút? Nghe có vẻ hơi khủng khiếp (như Chúa tể trên không khủng khiếp, không Hoàng hôn Teen-Angst khủng khiếp). Trên thực tế, nó hơi khó chịu: bạn sử dụng chết Khi cái gì có thể đi sai trong kịch bản của bạn. Nghĩ về chết như nói, “Nếu mã của tôi chết, thì hãy làm điều gì đó ít khó chịu hơn là bỏ mã lỗi cho người dùng của tôi. Trong trường hợp này, chết In một thông báo lỗi đã thắng’T sợ người dùng của bạn.
Nhưng trước khi bạn có thể hiểu chết , Bạn phải biết một chút về hoạt động bên trong của mysql_connect . Khi mysql_connect Chạy, nó tạo ra hoặc sử dụng lại kết nối hiện có với cơ sở dữ liệu của bạn. Sau đó, nó trả về kết nối đó cho chương trình PHP của bạn và cung cấp tất cả các lệnh PHP-to-MYSQL khác’sẽ sớm tìm hiểu về. Nhưng nếu mysql_connect Có thể’T Tạo kết nối đó, ví dụ, nếu cơ sở dữ liệu của bạn không’T chạy hoặc bạn’ve có một máy chủ hoặc tên người dùng xấu mysql_connect Trả về một giá trị rất khác: SAI .
Vậy thì sao’S thực sự xảy ra trong kịch bản của bạn là một cái gì đó như thế này:
Nhưng đó là rất nhiều việc gõ, vì vậy PHP cho phép bạn rút ngắn nó thành phần sau: Lỗi kết nối với cơ sở dữ liệu: " . mysql_error () . ""); Echo"Kết nối với mysql!
"; ?>
Kịch bản này không chỉ ngắn hơn mà còn lật mọi thứ xung quanh một chút. Về cơ bản, nó nói, hãy cố gắng kết nối (sử dụng mysql_connect ) và nếu kết quả không’t đúng ( hoặc một phần của mã), sau đó chết. chết in ra một thông báo lỗi, nhưng nó cũng “chết.” Nói cách khác, nó kết thúc tập lệnh của bạn. Do đó, nếu mysql_connect trả lại SAI , Và chết Chạy, tập lệnh của bạn sẽ thoát. Người dùng của bạn đã thắng’T bao giờ thấy “Kết nối với mysql!” dòng vì tập lệnh sẽ ngừng chạy. Nó’S đã chết trên sàn phòng máy chủ, để tìm kiếm kết nối cơ sở dữ liệu làm việc. (Xem hộp trên mọi người chết tại một số điểm để biết thêm chi tiết về chết yêu cầu.)
Không chỉ vậy mà mysql_connect thiết lập một chức năng khác khi nó có thể’T kết nối. Nó tạo ra các lỗi mà nó gặp phải khi cố gắng kết nối có sẵn thông qua một lệnh khác, mysql_error . Vì vậy, bạn có thể gọi mysql_error Là một phần của bạn chết tuyên bố để hiển thị những gì thực sự đã xảy ra.
Ghi chú
Về mặt kỹ thuật, mysql_connect, mysql_error , Và chết là tất cả các ví dụ về chức năng . Một hàm là một khối mã, thường có tên được gán cho nó, bạn có thể gọi từ mã của riêng mình bất cứ lúc nào bạn cần khối đó. Nó’S nhanh hơn rất nhiều và tốt hơn để gọi một hàm theo tên hơn là viết lại khối mã mà hàm biểu thị nhiều lần.
Giảng viên đại học’T lo lắng về các chức năng cho bây giờ, mặc dù. Chỉ cần sử dụng chúng như bất kỳ lệnh PHP cũ nào. Không lâu, bạn không chỉ hiểu các chức năng tốt hơn mà còn’sẽ viết của riêng bạn.
Nếu như mysql_connect kết nối mà không có bất kỳ vấn đề nào, nó trả về kết nối đó. PHP sẽ bỏ qua chết dòng, sau đó thực hiện dòng này:
tiếng vang "Kết nối với mysql!
";
Để xem lệnh này hoạt động, hãy tạo một biểu mẫu HTML đơn giản và gọi nó kết nối.HTML. Bạn có thể sử dụng HTML này để giúp bạn đi:
PHP & MySQL: Hướng dẫn thiếu
Ví dụ 4-1Kiểm tra kết nối SQL
Kịch bản này đơn giản như nó nhận được: nó xây dựng một biểu mẫu, thả một nút vào vị trí và gắn nút đó vào mới kết nối.PHP kịch bản. Tải biểu mẫu của bạn trong trình duyệt (xem Hình 4-1) và nhấp vào “Kết nối với MySQL.”
Hy vọng rằng, bạn sẽ thấy một trong những thông điệp đơn giản nhất, hạnh phúc nhất về sự nghiệp lập trình PHP và MySQL đang phát triển của bạn: Bạn’kết nối lại! Kiểm tra Hình 4-2 để biết tầm nhìn thành công ngọt ngào.
Hình 4-1. Chắc chắn, bạn có thể đã kết nối.HTML thậm chí đơn giản hơn. Bạn có thể đã bỏ tất cả các cấu trúc và CSS tham khảo. Nhưng ai muốn kết nối với cơ sở dữ liệu mà không thể hiện một chút? Bên cạnh đó, khách hàng thích một trang web đẹp, sạch sẽ. Bạn không’T phải dành hàng giờ cho CSS, nhưng làm cho cả những bản demo cơ bản nhất của bạn trông chuyên nghiệp và khách hàng của bạn sẽ yêu bạn vì nó.
Hình 4-2. Ba từ này có nghĩa là tập lệnh PHP của bạn bây giờ có thể làm hầu như bất cứ điều gì bạn có thể tưởng tượng với cơ sở dữ liệu của mình. Nhưng ở đó’S cái gì đó bị thiếu: Làm thế nào để mysql biết cơ sở dữ liệu nào là của bạn? Bạn vẫn cần cho PHP biết sử dụng cơ sở dữ liệu nào.
Chọn cơ sở dữ liệu để sử dụng
Ở đó’S Một cái gì đó tuyệt vời đang chờ đợi xung quanh góc lập trình bây giờ: hầu như tất cả mysql_ Gia đình chức năng hoạt động giống nhau: bạn cung cấp cho họ một số giá trị và chúng trả lại một cái gì đó hữu ích. Nếu điều gì đó xấu xảy ra, bạn cũng thường quay lại SAI hoặc một đối tượng không tồn tại (điều mà hầu hết các lập trình viên gọi vô giá trị hoặc không ).
Vì vậy, bây giờ bạn cần nói với MySQL cơ sở dữ liệu mà tập lệnh PHP của bạn muốn sử dụng. Ở đó’S là một chức năng cho điều đó: mysql_select_db .
Ghi chú
Ở đó’s Một đại gia đình của mysql_ chức năng. Bạn có thể muốn đánh dấu trang tài liệu của họ: www.PHP.Net/Hướng dẫn/EN/Ref.mysql.PHP. Nếu bạn đã từng bị mắc kẹt, hãy đến đó và xem liệu một chức năng có thể làm những gì bạn cần.
Người dùng quyền lực’ Phòng khám: Mọi người đều chết tại một số điểm
Nó’S dễ dàng đáng sợ để thêm những thứ đó chết Phát biểu cho tập lệnh PHP của bạn. PHP không’t yêu cầu họ, vì vậy nó’S hoàn toàn hạnh phúc khi chấp nhận một cái gì đó như thế này:
mysql_connect ("cơ sở dữ liệu.chủ nhà.com "," tên người dùng "," mật khẩu ");
Cái đó’s cùng một mã bạn’đã viết, ngoại trừ nó chỉ rời khỏi chết phần.
Nhưng ở đây’S điều: bỏ đi điều đó chết , Và khi có sự cố xảy ra, kịch bản của bạn sẽ bị sập và cung cấp một cái gì đó’S hoặc là một lỗi thực sự vô dụng, hoặc một cái gì đó khó khăn đến mức bạn có thể’t thậm chí còn nói Gì nó là. Ví dụ, nếu bạn bỏ đi chết , và nhập sai mật khẩu và chạy tập lệnh của bạn, bạn’sẽ nhận được một lỗi tương tự như sau:
Không thể kết nối với máy chủ MySQL cục bộ thông qua ổ cắm '/TMP/MySQL.Sock '(2)
Tin hay không, thông báo lỗi này thực sự là một thông báo khá nhiều thông tin, vì mọi thứ đã bị thiếu chết các câu lệnh. Thêm rằng một dòng xử lý lỗi có thể tạo ra sự khác biệt lớn cho người dùng khi mọi thứ đi sai.
Trên thực tế, khi bạn bắt đầu xây dựng các ứng dụng web lớn hơn, đầy đủ hơn, bạn có thể chuyển hướng người dùng của mình đến một trang lỗi được định dạng độc đáo, hoàn thành với thông tin liên hệ cho quản trị viên và báo cáo lỗi theo kiểu CSS. Nhưng không ai trong số đó là có thể mà không có chết .
Bây giờ, hãy loại bỏ sức mạnh PHP, bạn có thể đã nghĩ rằng bạn đã mắc rất ít lỗi. Bạn có thể nghĩ rằng chết dành cho những người nghiệp dư xếp hạng, những người không’t viết mã hoàn hảo. Thật không may, khi bạn’trở lại lúc 2 giờ sáng cố gắng đạt được thời hạn để bạn có thể được trả tiền, bộ não của bạn bắt đầu giống, cũng như một thứ hạng nghiệp dư cấp bậc. Mọi người đều phạm sai lầm, và chết (cùng với các kỹ thuật xử lý lỗi khác) là một trong những người cứu sinh giúp bạn trông chuẩn bị và chuyên nghiệp khi những sai lầm không thể tránh khỏi.
Trên thực tế, các lập trình viên cao cấp nhất, được trả lương cao nhất trên thế giới là các bậc thầy xử lý lỗi. Đồng thời, họ’có thể là không sử dụng chết . Họ’Có nhiều khả năng sử dụng một hệ thống xử lý lỗi mạnh mẽ hơn; một cái gì đó giống như lỗi xử lý bạn’sẽ sử dụng trong Chương 7. Tuy nhiên, hiện tại, việc sử dụng lành mạnh và tự do chết sẽ giúp bạn quen với việc thêm vào một hình thức xử lý lỗi.
Bạn cung cấp cho mysql_select_db một tên cơ sở dữ liệu và – bạn đã đoán nó là nó SỬ DỤNG s cơ sở dữ liệu đó hoặc trả về SAI . Vì vậy, cập nhật kết nối.PHP ĐẾN SỬ DỤNG Cơ sở dữ liệu phù hợp:
Lỗi kết nối với cơ sở dữ liệu: " . mysql_error () . ""); Echo"Kết nối với mysql!
";
mysql_select_db ("tên gọi của bạn")
hay là chết("
Lỗi khi chọn cơ sở dữ liệu bmclaugh: " .
mysql_error () . "
");
tiếng vang "
Đã kết nối với MySQL, sử dụng cơ sở dữ liệu BMCLAUGH.
"; ?>
Bạn đã xem mẫu. chết Đảm bảo rằng nếu những điều xấu xảy ra, tập lệnh của bạn báo cáo lỗi, người dùng của bạn đã đọc lỗi đó và sau đó tập lệnh thoát ra. Nếu mọi thứ diễn ra tốt đẹp, một tin nhắn hạnh phúc khác sẽ được in.
Hãy thử phiên bản mới này. Thăm nom kết nối.HTML một lần nữa và thử và kết nối (và bây giờ SỬ DỤNG ) Cơ sở dữ liệu của bạn. Bạn muốn xem một cái gì đó như Hình 4-3. Tiếp theo: Nói chuyện SQL vào cơ sở dữ liệu của bạn.
Hình 4-3. Một lần nữa, một vài từ đơn giản và những điều quan trọng đang diễn ra đằng sau hậu trường. Tập lệnh của bạn hiện có kết nối với MySQL và đang sử dụng cơ sở dữ liệu phù hợp.
Hiển thị cơ sở dữ liệu của bạn’s Bàn
Bây giờ bạn’ve có một kết nối, và bạn’Tie vào cơ sở dữ liệu phù hợp, bạn sẽ thấy những gì bạn’phải làm việc với. Trong công cụ MySQL của bạn, một trong những điều đầu tiên bạn đã làm là xem những gì các bảng tồn tại, và sau đó bắt đầu tạo bảng của riêng bạn. Ở đó’s Một số công việc khác phải làm trong việc tạo bảng, và bạn’sẽ làm điều đó một chút, với biểu mẫu HTML mới và tập lệnh mới.
Nhưng trước khi đi sâu vào đó, bạn có thể dễ dàng có tập lệnh của mình, hãy xem bảng nào có sẵn trong cơ sở dữ liệu của bạn. Mở ra kết nối.PHP Một lần nữa, và thêm dòng sau:
$ result = mysql_query ("Hiển thị bảng;");
?>
Đây’s Một chức năng PHP-to-MYSQL mới khác: mysql_query . Bạn’Tôi sẽ trở nên rất, rất quen thuộc với cái này; Nó’S là khóa để chuyển SQL vào cơ sở dữ liệu của bạn. Chức năng này có trong sql và bạn’Ve đã cho nó một số SQL thực sự đơn giản:
Hiển thị bảng;
Lệnh này là chính xác Giống như gõ SQL vào công cụ dòng lệnh của bạn.
Xử lý lỗi bằng cách xem kết quả của bạn không
Nhưng những gì về chết ? Điều gì về xử lý lỗi? Ở đó’Không ai trong số đó, và bây giờ, bạn biết nên có. Nhưng ở đó’s Một cái gì đó khác biệt về dòng này: bất cứ điều gì trở lại từ mysql_query được nhồi vào một biến gọi là $ Kết quả .
Do đó, nó’s thực sự $ Kết quả rằng bạn muốn kiểm tra. Nó sẽ có một danh sách các bảng, từ Hiển thị bảng , hoặc nó’s Báo cáo lỗi của một số loại. Và nếu nó’S báo cáo một lỗi, sau đó $ Kết quả là sai, bởi vì mysql_ Các chức năng trở lại sai khi ở đó’S là một vấn đề.
Tuy nhiên, bạn biết cách kiểm tra giá trị sai, vì vậy bạn có thể thêm mã này để xử lý các vấn đề:
if ($ result === false) chết("
Lỗi trong bảng liệt kê: " . mysql_error () . "
");
>
?>
Bây giờ, điều này hoạt động, nhưng nó’S thực sự không phải là cách mà hầu hết các lập trình viên PHP làm mọi thứ. Các === là một điều khá bất thường để sử dụng trong PHP, ít nhất là để kiểm tra xem liệu một biến có sai. Cái gì’S phổ biến hơn - và cách nó’S thường được thực hiện trong PHP, là sử dụng toán tử phủ định (còn được gọi là toán tử BANG), đây là một dấu chấm than: ! . Vì vậy, nếu bạn muốn xem một biến được gọi là $ một số biến là sai, bạn có thể nói nếu như (!$ một số biến) . Và cái đó ! nói điều gì đó như, “Xem liệu $ một số biến là sai.”
Thậm chí tốt hơn, hãy nghĩ về ! như là “không.” Vì vậy, những gì bạn thực sự muốn nói trong mã của bạn là, “Nếu như Không phải $ kết quả , sau đó chết.” Theo đó, bạn có thể viết lại mã của mình để trông như thế này:
nếu như (!$ result) chết("
Lỗi trong bảng liệt kê: " . mysql_error () . "
");> ?>
Loại mã này tốt hơn nhiều, và bây giờ bạn’ve có bất kỳ vấn đề nào được bảo hiểm.
Ghi chú
Có vẻ kỳ lạ khi nghe về “cách nó’s đã hoàn thành trong PHP.” Nếu mã hoạt động, thì nó hoạt động, đúng? Vâng, vâng, nhưng bạn đã bao giờ nghe một người’s chỉ học tiếng Anh nói tiếng Anh? Thông thường, lời nói của họ là chính xác, nhưng thứ tự, cách sử dụng và thành ngữ là sai. Hãy thử và giải thích lý do tại sao nhiều hơn một con cừu vẫn chỉ “con cừu,” và bạn’có ý tưởng.
Ngôn ngữ lập trình giống nhau. Ở đó’S Viết mã hoạt động, và ở đó’S viết mã trông giống như bạn biết ngôn ngữ. Đôi khi điều này được gọi là hùng hồn . Thực tế có một số cuốn sách tuyệt vời cho “Nói đúng” Trong JavaScript và Ruby được gọi JavaScript hùng hồn (Marijn Haverbeke; không có báo chí tinh bột) và Ruby hùng hồn (Russ Olsen; Addison Wesley). Nó’Không chỉ học cách viết php làm việc, mà còn viết php trông tự nhiên.
Trên thực tế, chỉ để đảm bảo mã của bạn xử lý các lỗi, hãy thay đổi truy vấn SQL của bạn để có lỗi chính tả:
$ result = mysql_query ("Các bảng hiển thị;");
nếu như (!$ result) < die("Lỗi trong bảng liệt kê: " . mysql_error () . "
");> ?>
Bây giờ tải lên kết nối.HTML trong trình duyệt và chạy thử nghiệm kết nối của bạn. Hình 4-4 tương tự như những gì bạn nên thấy: Vẫn còn một chút mật mã.
Hình 4-4. Đối phó với lỗi mỗi bước trên đường đi. Bạn càng xử lý các lỗi tốt hơn và thông điệp của bạn càng cụ thể thì càng dễ dàng tìm ra’S đã sai với mã của bạn. Điều đó có nghĩa là mã hoạt động tốt cho người dùng của bạn và bạn có thể dễ dàng sửa chữa khi lỗi tăng lên.
In kết quả SQL của bạn
Lỗi được xử lý, các vấn đề được báo cáo và bây giờ cuối cùng bạn có thể giải quyết những gì’s thực sự trong $ Kết quả Khi mọi thứ không’T đi sai. Thật không may, mọi thứ trở nên khó khăn hơn một chút ở đây. $ Kết quả thực sự không phải là một loại php bạn’đã sử dụng, hoặc thậm chí một cái mà bạn’Tôi cần phải học cách làm việc trực tiếp với. Nó’s Một cái gì đó được gọi là một nguồn , đó là php-speak cho một biến đặc biệt’s liên quan đến một cái gì đó bên ngoài PHP.
Hãy nghĩ về nó như thế này: trong trường hợp của mysql_query , Bạn’ve yêu cầu kết quả SQL không chạy truy vấn Hiển thị bảng . Nhưng trong khi PHP có thể nói chuyện với mysql, nó thực sự không’T biết cách diễn giải SQL. Vì vậy, nó có thể’T biết điều đó $ Kết quả nên giữ một danh sách các hàng, mỗi hàng có một giá trị: một tên bảng. Tất cả những gì nó biết là một cái gì đó khác của bạn mysql_query chức năng. Và nghĩ về nó: Tùy thuộc vào truy vấn bạn vượt qua mysql_query, $ result có thể giữ các hàng có nhiều thông tin, như tên đầu tiên và URL Facebook, hoặc chỉ là một dấu hiệu cho thấy một TẠO BẢNG Tuyên bố có làm việc hay không.
Vì vậy, trong những trường hợp này, bạn thường kết thúc với một tài nguyên PHP. Tài nguyên đó có nghĩa là thứ gì đó ; Nó’s chỉ là php không’t thực sự biết cái gì đó là gì. Vì vậy, PHP của bạn cần trợ giúp. Những gì nó cần là một cái gì đó biết về MySQL và có thể tìm ra cách làm việc với $ Kết quả . Cái đó’s chính xác những gì bạn nhận được với chức năng MySQL khác, mysql_fetch_row . Bạn vượt qua chức năng này trong một tài nguyên được trả về từ mysql_query , Và nó cho phép bạn đạp xe qua từng hàng trong kết quả được trả về từ truy vấn SQL của bạn.
Đây’s mẫu cơ bản:
- Viết truy vấn SQL của bạn và lưu trữ nó trong một chuỗi hoặc một biến.
- Chuyển truy vấn của bạn vào mysql_query và lấy lại tài nguyên PHP.
- Chuyển tài nguyên đó vào mysql_fetch_row Để lấy lại các hàng kết quả, mỗi lần một.
- Chu kỳ qua các hàng đó và rút ra thông tin bạn cần.
- Mua một cây đàn guitar thực sự đẹp với tất cả tiền mặt bạn’làm lại.
Ghi chú
Bước cuối cùng đó là tùy chọn, nhưng rất được khuyến khích.
Bạn’có một tài nguyên trong $ Kết quả , Vì vậy, bây giờ chuyển nó vào mysql_fetch_row , như thế này:
Cảnh báo
Nếu bạn đã thay đổi SQL của mình thành Hiển thị bảng Để tạo ra một lỗi như được mô tả khi xử lý lỗi bằng cách xem kết quả của bạn có không, hãy chắc chắn và thay đổi nó trở lại SQL làm việc: Hiển thị bảng .
Mặc dù PHP không’T biết phải làm gì với tài nguyên được trả về từ mysql_query, mysql_fetch_row làm. Nó có trong của bạn $ Kết quả tài nguyên và bắt đầu phun ra các hàng, mỗi lần một, trong một mảng.
Và sau đó ở đó’s cái đó trong khi Vòng lặp, cũng là mới, nhưng có lẽ có ý nghĩa với bạn. MỘT trong khi Vòng lặp tiếp tục vòng lặp miễn là một cái gì đó là sự thật. Trong trường hợp này, vòng lặp tiếp tục lặp trong khi $ hàng —Chich là hàng kết quả tiếp theo từ truy vấn SQL của bạn - nhận được một giá trị từ mysql_fetch_row ($ result) . Khi không có thêm các hàng kết quả, mysql_fetch_row không’T trả lại bất cứ điều gì, vì vậy $ hàng trống rỗng, và trong khi Vòng lặp nói, “Ok, tôi’m đã hoàn thành. TÔI’Tôi sẽ dừng vòng ngay bây giờ.”
Và bạn’Ve có một danh sách không có thứ tự tốt ( UL ) sẵn sàng nhổ từng hàng, vì vậy ở đó’chỉ còn một điều để thêm:
Mã này sẽ bắt đầu trông quen thuộc trở lại. Mỗi lần mysql_fetch_row trả lại $ hàng , Nó’S thực sự trả lại một mảng, một cái gì đó bạn’Ve xem trước (biến $ _Request). Mảng đó có tất cả các thông tin khác nhau từ truy vấn SQL của bạn. Vì Hiển thị bảng , cái đó’chỉ là một điều, tại $ Row [0] : Tên bảng. Khá sớm, bạn’sẽ viết một số truy vấn phức tạp hơn và bạn có thể cần phải lấy giá trị trong $ hàng [1] hoặc $ hàng [2] hoặc thậm chí $ hàng [10] .
Vì vậy, trong trường hợp này, bạn trở lại $ hàng , Bạn lấy tên bảng bằng cách lấy mục đầu tiên trong mảng, tại INDEX 0, sau đó bạn in nó bằng tiếng vang . Ở đó’S chỉ một nếp nhăn khác ở đây: những niềng răng xoăn bên trong chuỗi được truyền đến Echo. Cái gì’S up với những người đó?
Chà, bạn có thể viết lại dòng này như thế này:
Không có gì sai ở đó, ngoại trừ tất cả các dấu ngoặc kép và thời gian để gắn dây lại với nhau.
Ghi chú
Điểm mọt sách chính nếu bạn nhớ rằng các chuỗi nghiền với nhau được gọi là Concatenation (kết hợp văn bản).
Nhưng PHP khá hiểu biết, và những người viết ngôn ngữ cũng là lập trình viên. Họ nhận ra, giống như bạn, rằng bạn’liên tục phải thả các biến vào giữa chuỗi. Vì vậy, thay vì liên tục kết thúc một chuỗi và thêm một biến, bạn chỉ có thể bọc một biến bên trong của < >, và PHP sẽ in giá trị của biến đó thay vì “$ Row [0]”. Nó làm cho mã đơn giản hơn rất nhiều và điều đó’S một điều tốt.
Cứu kết nối.PHP , Xem lại kết nối.HTML trong trình duyệt của bạn và xem bạn bảng gì’Ve có trong cơ sở dữ liệu của bạn. Hình 4-5 là kết nối.PHP chạy trên cơ sở dữ liệu với rất nhiều bảng. Bạn có thể chỉ có một hoặc hai, và điều đó’S tốt. Chỉ cần chắc chắn rằng bạn thấy một danh sách các bảng của bạn.
Hình 4-5. Hiển thị bảng hóa ra là khá vô dụng trong trình duyệt khá nhanh. Kết quả này có thể trông giống như một số lượng lớn các bảng, nhưng bạn’Có khả năng viết các ứng dụng web có 20, 30 hoặc thậm chí 100 bảng trong một ứng dụng. Bây giờ, mặc dù, nó’Đây là một cách thực sự dễ dàng để đảm bảo các tập lệnh PHP của bạn đang nói chuyện với cơ sở dữ liệu MySQL của bạn.
Làm sạch mã của bạn bằng nhiều tệp
Ngay cả khi bạn không’T nhận ra nó chưa, ở đó’S cái gì đó có vấn đề về bạn kết nối.PHP kịch bản. Nhìn vào một vài cuộc gọi MySQL đầu tiên mà bạn thực hiện:
mysql_connect (".cơ sở dữ liệu.chủ nhà",
"Tên bạn của bạn", "Từ của bạn")
hay là chết("Lỗi kết nối với cơ sở dữ liệu: " . mysql_error () . "
"); Echo"
Kết nối với mysql!
";
mysql_select_db ("tên gọi của bạn")
hay là chết("Lỗi khi chọn cơ sở dữ liệu bmclaugh: " . mysql_error () . "
"); Echo"
Đã kết nối với MySQL, sử dụng cơ sở dữ liệu BMCLAUGH.
"; // Và như thế. ?>
Bạn’Gõ thủ công máy chủ cơ sở dữ liệu của bạn, tên người dùng, mật khẩu và tên cơ sở dữ liệu của bạn vào tập lệnh của bạn. Bây giờ giả sử bạn có 10 kịch bản và bạn’Re gõ đó 10 lần. Cơ hội của một lỗi đánh máy khá cao.
Không chỉ vậy, những gì xảy ra khi bạn thay đổi mật khẩu của mình? Hoặc bạn nâng cấp lên kế hoạch lưu trữ tốt hơn để xử lý tất cả lưu lượng truy cập web mà ứng dụng của bạn đang tạo và bạn cần thay đổi máy chủ cơ sở dữ liệu của mình? Bạn’phải theo dõi mọi nơi bạn đặt thông tin đó, trong mỗi tập lệnh PHP. Cái đó’là một cơn ác mộng, và ngăn bạn thực sự viết mã mới và kiếm thêm tiền mặt. Không tốt.
Bạn cần một cách để Tóm tắt ra Những thông tin đó. Trừu tượng là một thuật ngữ lập trình có nghĩa là che giấu việc triển khai, cách thức một cái gì đó (như mật khẩu) hoạt động, từ các chương trình sử dụng nó. Về cơ bản, bạn có một biểu tượng, hoặc một cái tên, và cái tên đó đề cập đến một cái gì đó khác với nhiều chi tiết hơn. Và ngay cả khi chi tiết đó thay đổi, tên vẫn chỉ vào đúng.
Nó’S như nói “Leigh,” và có nghĩa là vợ tôi, mà không cần phải nói, “Người phụ nữ 34 tuổi nóng bỏng đó với mái tóc vàng ngắn và đôi chân tuyệt vời.” Và vẻ đẹp của “Leigh” là mỗi sinh nhật, bạn có thể tiếp tục nói, “Leigh,” Thay vì thay đổi mô tả của bạn.
Thay thế các giá trị gõ bằng tay bằng các biến
Vì vậy, giả sử bạn muốn mã của bạn trông giống như thế này hơn (thực sự, bạn thực sự LÀM Muốn nó trông giống như thế này hơn):
mysql_connect ($ database_host, $ username, $ password)
hay là chết("Lỗi kết nối với cơ sở dữ liệu: " . mysql_error () . "
"); Echo"
Kết nối với mysql!
";
mysql_select_db ($ database_name)
hay là chết("Lỗi khi chọn cơ sở dữ liệu bmclaugh: " . mysql_error () . "
"); Echo"
Đã kết nối với MySQL, sử dụng cơ sở dữ liệu BMCLAUGH.
"; // Và như thế. ?>
Tất cả các bạn’RE làm là viết một cái gì đó trông hơi giống một biến thay cho tên tên người dùng hoặc tên cơ sở dữ liệu. Bây giờ bạn có thể xác định các biến đó lên trên mã kết nối của mình:
$ database_host = "của bạn.cơ sở dữ liệu.chủ nhà";
$ username = "Tên của bạn";
$ password = "của bạn-password";
$ database_name = "tên của bạn";
// Mã kết nối cơ sở dữ liệu ?>
Nhưng điều này thực sự tốt hơn nhiều? Chưa; Bạn’VE vẫn có những giá trị tương tự được gõ bằng tay vào tập lệnh của bạn. Bạn muốn dán các giá trị trong một tệp để không có con người nào phải nhập chúng. Đọc tiếp.
Tóm tắt các giá trị quan trọng thành một tệp riêng biệt
Mục tiêu của bạn là đưa những giá trị này ra khỏi kết nối.PHP , vào một nơi nào đó mà tất cả các tập lệnh PHP của bạn có thể truy cập chúng mà không cần gõ từ bạn. Mở một tệp mới và gọi nó app_config.PHP . Bây giờ hãy thả các biến của bạn vào tệp mới này:
Ghi chú
Hãy chắc chắn và tiết kiệm app_config.PHP ở đâu đó có ý nghĩa đối với tất cả các ứng dụng của bạn’s tập lệnh để truy cập nó. Trong cuốn sách này’ví dụ s, app_config.PHP nằm trong gốc của trang web, dưới kịch bản/ . Vì vậy, nếu bạn’Re trong ch04/script/ Thư mục, bạn’D truy cập tệp này tại ../../scripts/app_config.PHP , hoặc [site_root]/scripts/app_config.PHP . Bạn có thể lưu tệp bất cứ nơi nào bạn muốn, miễn là bạn nhận được đường dẫn ngay trong các tập lệnh PHP tham chiếu nó.
Khi bạn chuyển sang phiên bản sản xuất của ứng dụng, có lẽ bạn muốn đặt tệp này bên ngoài root trang web. Bằng cách đó, người dùng web có thể’t chỉ cần nhập đường dẫn vào tập lệnh cấu hình của bạn và nhận tất cả mật khẩu của bạn. Ngoài ra, bạn có thể thêm bảo mật cho thư mục này, mặc dù chỉ đơn giản là đưa nó ra khỏi các thư mục phục vụ web hoàn toàn.
Bây giờ, bạn có thể có tất cả các tập lệnh PHP khác nhau của mình sử dụng các biến được chia sẻ này. Thay đổi một biến ở đây trong app_config.PHP , và sự thay đổi đó ảnh hưởng đến tất cả các tập lệnh PHP của bạn sử dụng các biến được chia sẻ này.
Nhưng làm thế nào để bạn thực sự truy cập các biến này? Quay trở lại kết nối.PHP , và loại bỏ nơi bạn đã tự xác định các biến này. Nếu bạn cố gắng và truy cập kết nối.PHP bởi vì kết nối.HTML Bây giờ, mặc dù, bạn’sẽ nhận được một lỗi khó chịu, như được hiển thị trong xem Hình 4-6.
Hình 4-6. Bạn đã xác định các biến của mình trong app_config. PHP, nhưng kết nối.PHP không’T biết điều này. Bạn cần nói với tập lệnh kết nối của bạn rằng nó không nên’T chạy cho đến khi tải app_config.PHP. Sau đó mọi thứ sẽ hoạt động, bởi vì các biến kết nối.Sử dụng PHP sẽ được đặt đúng.
Lỗi xảy ra vì kết nối.PHP bây giờ không biết gì $ người dùng hoặc $ Mật khẩu đề cập đến. Bạn cần thông báo cho PHP rằng trước khi nó cố gắng làm bất cứ điều gì trong kết nối.PHP , Nó’S bắt buộc phải tải app_config.PHP . Và cái đó’S (gần như) chính xác những gì bạn nhập vào tập lệnh của mình:
yêu cầu '../../scripts/app_config.PHP ';
// Mã kết nối cơ sở dữ liệu ?>
Bây giờ, PHP tải tệp ../../scripts/app_config.PHP trước nó chạy của bạn mysql_connect chức năng. Có hiệu lực, yêu cầu nói, “Này PHP, nếu bạn có thể’T Tải tệp I’M cho đi, sau đó ném một lỗi khó chịu, bởi vì không có gì khác sẽ hoạt động.”
Cảnh báo
Đảm bảo đường dẫn và tên tệp bạn đưa ra yêu cầu các trận đấu mà bạn thực sự đặt app_config.PHP , hoặc bạn’sẽ thấy lỗi đó yêu cầu Sản xuất gần gũi và cá nhân.
Hãy thử và chạy lại tập lệnh kết nối của bạn và bạn sẽ thấy danh sách bảng của mình, điều đó có nghĩa là mọi thứ đang hoạt động tốt.
Dưới mui xe: Yêu cầu hoặc bao gồm?
Ở đó’s Một lệnh khác trong PHP đó’s rất giống với yêu cầu : bao gồm. bao gồm Làm chính xác những gì yêu cầu về mặt nói với PHP để tải một tệp khác. Sự khác biệt là nếu tệp đó có thể’t được tải, bao gồm Chỉ đưa ra một cảnh báo và cho phép PHP tiếp tục chạy các lệnh sau trong tập lệnh của bạn. Nói cách khác, yêu cầu hoàn toàn đóng cửa mọi thứ, nhưng bao gồm Hãy để kịch bản của bạn tiếp tục.
Nhưng ở đây’S điều. Bạn có phải Thực ra sẽ bận tâm bao gồm một tập tin nếu bạn không’t cần tập tin đó? Trong hầu hết các trường hợp, có lẽ không. Và bạn’Re bao gồm tập tin đó bởi vì bạn cần nó; Bạn yêu cầu Tệp đó để chạy. Vì vậy, trong hầu hết mọi tình huống, bạn nên sử dụng yêu cầu để lấy một tập tin khác, không bao gồm . Nếu có sự cố, bạn muốn biết về nó. Bạn không’T muốn phần còn lại của mã của bạn chạy, vì nó’S có lẽ sẽ không lỗi.
Các biến khác nhau, nhưng hằng số không đổi
Ở đó’S chỉ một vấn đề nhỏ nữa dai dẳng với mã của bạn: bạn’Re vẫn sử dụng các biến cho tên người dùng và mật khẩu của bạn, cùng với máy chủ cơ sở dữ liệu và tên cơ sở dữ liệu. Vậy thì sao’s một biến? Một cái gì đó thay đổi hoặc thay đổi. Theo đó, PHP vui vẻ cho phép bạn viết mã sau kết nối.PHP :
mysql_connect ($ database_host, $ username, $ password) hoặc die ("Lỗi kết nối với cơ sở dữ liệu: " . mysql_error () . "
"); // Điều này được cho phép, nhưng một số mojo xấu $ password =" Hijinks ";
Vì vậy, những gì xảy ra khi một số kịch bản khác cũng yêu cầu app_config.PHP —Tries để kết nối với mysql_connect ? Nó’S sẽ sử dụng $ Mật khẩu , nhưng bây giờ $ Mật khẩu không phải là’t đúng nữa. Nó’s Đặt thành “Hijinks,” và sự hỗn loạn sẽ xảy ra.
Những gì bạn thực sự muốn là cho những giá trị đó trong app_config.PHP không đổi và không bao giờ thay đổi. Bạn có thể làm điều này với đặc biệt định nghĩa chức năng. Mở ra app_config.PHP và thay đổi mã của bạn:
xác định ("cơ sở dữ liệu_host", ".cơ sở dữ liệu.chủ nhà");
Xác định ("cơ sở dữ liệu_username", "Tên của bạn");
Xác định ("DataBase_Password", "Your-Password");
Xác định ("cơ sở dữ liệu_name", "tên dữ liệu của bạn");
?>
Bạn xác định tên của một hằng số và giá trị cho hằng số đó và PHP tạo ra một hằng số mới. Bằng cách đó, bạn có thể gõ Cơ sở dữ liệu_host vào mã của bạn và PHP Thực ra nhìn “của bạn.cơ sở dữ liệu.chủ nhà”. Hoàn hảo! Và vì đây là một hằng số, nó có thể’T được thay đổi ở bất cứ đâu dọc theo dòng.
Các hằng số được gõ vào các chữ cái kháng thể. Mũ aren’t yêu cầu, nhưng nó’là một trong những người khác “Nói như một lập trình viên PHP” đồ đạc. Bạn muốn các hằng số trông khác với các biến và sử dụng tất cả các tên chữ hoa là một cách để làm điều đó. Các hằng số cũng không’t có $ trước tên của họ, đó là một cách khác để phân biệt hằng số với biến.
Bây giờ bạn cần thực hiện một số thay đổi nhanh chóng để kết nối.PHP Để sử dụng các tên được viết hoa mới của các hằng số:
mysql_connect (cơ sở dữ liệu_host, cơ sở dữ liệu_username, cơ sở dữ liệu_password)
hay là chết("Lỗi kết nối với cơ sở dữ liệu: " . mysql_error () . "
"); Echo"
Kết nối với mysql!
";
mysql_select_db (cơ sở dữ liệu_name)
hay là chết("Lỗi khi chọn cơ sở dữ liệu "
. TÊN CƠ SỞ DỮ LIỆU .
mysql_error () . "");
tiếng vang "
Được kết nối với MySQL, sử dụng cơ sở dữ liệu " . TÊN CƠ SỞ DỮ LIỆU . "
"; // Tiền tốt của SQL truy vấn chạy. ?>
Cảnh báo
Bạn có thể’t sử dụng Bên trong báo giá của bạn để in các hằng số. Nó’chỉ khi bạn bao quanh một biến (bắt đầu bằng $ ) với php đó in giá trị của biến đó. Thay vào đó, hãy sử dụng phương pháp ghép chuỗi thông thường trong đó bạn kết thúc chuỗi của mình và thêm các hằng số bằng dấu chấm (.), như đã thảo luận về kết hợp văn bản.
Thử kết nối.PHP lại. Bạn sẽ nhận được một danh sách hoàn toàn tốt các tên bảng. Nhưng lần này, bạn’ve có các hằng số cho thông tin quan trọng của bạn, được giấu một cách an toàn trong một tệp được phân tách kết nối.PHP .
Ghi chú
Nó’s cũng là một ý tưởng tốt để thêm một số bảo mật bổ sung vào app_config.PHP , Và bất kỳ tập lệnh nào khác có chứa các giá trị đặc biệt như mật khẩu. Bạn có thể đặt các quyền trên tệp để hạn chế hơn hoặc di chuyển tệp đến một nơi nào đó tập lệnh PHP của bạn có thể truy cập, nhưng người dùng web của bạn có thể’t. Yêu cầu quản trị viên web hoặc máy chủ của bạn để được trợ giúp nếu bạn’không biết làm thế nào để làm điều đó.
Thời gian thiết kế: Bắt đầu nhỏ, thêm nhỏ, hoàn thành nhỏ
Bạn có thể tự hỏi tại sao bạn không thể’T vừa mới bắt đầu với app_config.PHP , và phiên bản hoàn thành, làm việc của kết nối.PHP . Hoặc, ở mức tối thiểu, bạn có thể đã bỏ tất cả mã kết nối cơ sở dữ liệu vào kết nối.PHP cùng một lúc, và sau đó thực hiện tất cả mã in cùng một lúc. Không phải là’t đó là cách các nhà phát triển thực sự viết mã?
Vâng, có và không. Rất nhiều nhà phát triển viết mã như vậy. Họ nhập 10 hoặc 20 hoặc 50 dòng mã vào tập lệnh của họ, sau đó dùng thử. Rất nhiều thứ sẽ bị phá vỡ, bởi vì các nhà phát triển gõ quá nhanh và mắc lỗi. Nhưng sau đó họ’sẽ khắc phục từng vấn đề, từng cái một. Và đối với nhiều nhà phát triển, điều đó’s chỉ tốt.
Nhưng ở đây’S điều: đó’S không phải là một cách làm việc rất hiệu quả. Trên hết, bạn’Re thường tập trung vào bước cuối cùng (như in ra các bảng) và vì vậy bạn có thể không dành nhiều thời gian để tìm ra cách tốt nhất để xử lý các bước giữa. Bạn có thể không sử dụng Để đơn giản hóa tuyên bố in $ Row [0] , Hoặc bạn có thể bỏ qua một chết bởi vì bạn’Re Suy nghĩ về đầu ra HTML, không xử lý trường hợp mật khẩu cơ sở dữ liệu không’t đúng.
Các nhà phát triển tốt nhất làm việc trên các phần mã thực sự, thực sự nhỏ. Họ kiểm tra mã đó, và sau đó họ chuyển sang một thứ khác. Trong thực tế - và điều này vượt xa cuốn sách này, nhưng nó’S vẫn quan trọng - rất nhiều nhà phát triển thực sự ưu tú thực sự viết bài kiểm tra trước Họ viết bất cứ điều gì khác. Họ viết những bài kiểm tra đó, và các bài kiểm tra rõ ràng đã thất bại, bởi vì họ đã’t đã viết bất kỳ mã nào. Sau đó, họ viết đủ mã để vượt qua bài kiểm tra của họ, và sau đó họ viết một bài kiểm tra khác.
Phương pháp này ban đầu có thể không có nhiều ý nghĩa. Tại sao viết các bài kiểm tra cho mã không’t tồn tại? Đây’s cái gì’S thực sự hạt: Thông thường, cách tiếp cận này dẫn đến mã kiểm tra nhiều hơn mã ứng dụng thực tế! Nó’là rất nhiều công việc, và nó’Tất cả đều dựa trên ý tưởng rằng bạn nên viết đủ mã để có được một thứ hoạt động tại một thời điểm.
Nhưng ở đây’S Tiết lộ lớn và tại sao các nhà phát triển ưu tú này là ưu tú: cách tiếp cận đầu tiên này dẫn đến mã tốt hơn. Làm việc nhỏ, từ đầu đến cuối, có nghĩa là bạn’tập trung vào một điều, và làm điều đó thực sự tốt. Bạn aren’T vội vã vào một cái gì đó khác. Và điều đó có nghĩa là những gì bạn’làm việc trên là vững chắc và hoạt động. Cách tiếp cận này sẽ mất nhiều thời gian hơn ngay từ đầu, nhưng nó dẫn đến mã vững chắc sẽ phá vỡ ít thường xuyên hơn.
Vì vậy, hãy dành thời gian của bạn và làm việc nhỏ. Mã của bạn sẽ tốt hơn và khách hàng của bạn sẽ yêu bạn vì mã của bạn vẫn đang chạy trong khi họ’trên điện thoại cố gắng nhận trợ giúp với một ứng dụng bị hỏng từ “các bạn khác, các người khác.”
Xây dựng một bộ truy vấn SQL cơ bản
Bây giờ bạn có thể kết nối với SQL, bạn’RED Sẵn sàng nhận một cái gì đó đầy tham vọng hơn: Xây dựng phiên bản công cụ dòng lệnh MySQL của riêng bạn. Tất nhiên, bạn’Re là nhà phát triển và lập trình viên PHP ngay bây giờ, vì vậy hãy loại bỏ tinh thần “dòng lệnh” và thay thế nó bằng “dựa trên web.”
Hóa ra bạn’đã có hầu hết các công cụ bạn cần. Bạn có thể dễ dàng xây dựng biểu mẫu HTML cho phép bạn và người dùng nhập vào truy vấn SQL, bạn biết cách kết nối với MySQL và chọn cơ sở dữ liệu và bạn có thể chạy truy vấn. Tất cả’S còn lại là tìm ra cách giải thích tài nguyên PHP đó mysql_query trở lại khi nó’S không phải là danh sách các tên bảng.
Tạo một biểu mẫu HTML với một hộp trống lớn
Trước khi đến mysql_query Và kết quả của nó, mặc dù, bắt đầu với những gì bạn biết: một hình thức HTML. Giữ mọi thứ đơn giản ngay bây giờ và chỉ cần tạo một biểu mẫu với một vùng văn bản duy nhất mà bạn có thể nhập truy vấn và một vài nút cơ bản.
Mở trình chỉnh sửa văn bản của bạn và tạo Queryrunner.HTML:
PHP & MySQL: Hướng dẫn thiếu
Ví dụ 4-2SQL Truy vấn chạy bộ
Nhập truy vấn SQL của bạn vào hộp bên dưới:
Bắn lên trình duyệt yêu thích của bạn và đảm bảo mọi thứ trông giống như Hình 4-7.
Hình 4-7. Ai đã từng nói rằng bạn sẽ không’T Dành nhiều thời gian để viết HTML và CSS khi bạn trở thành một lập trình viên web chính thức? Ngay cả với một người chạy SQL cơ bản, cấu trúc và phong cách tốt cũng tạo ra sự khác biệt lớn trong trình bày và mã của bạn dễ dàng cập nhật như thế nào.
Kết nối với cơ sở dữ liệu của bạn (một lần nữa)
Bạn biết gì’S Tiếp theo: Bạn cần kết nối với MySQL và sau đó SỬ DỤNG Cơ sở dữ liệu của bạn. Mã này sẽ khá quen thuộc bây giờ; mở ra Run_Query.PHP và đi làm:
Lỗi kết nối với cơ sở dữ liệu: " . mysql_error () . ""); Echo"Kết nối với mysql!
"; mysql_select_db (cơ sở dữ liệu_name) hoặc chết ("
Lỗi khi chọn cơ sở dữ liệu " . TÊN CƠ SỞ DỮ LIỆU . mysql_error () . "
"); Echo"
Được kết nối với MySQL, sử dụng cơ sở dữ liệu " . TÊN CƠ SỞ DỮ LIỆU . "
"; ?>
Nhưng chờ đợi… cái này là thân thuộc. Bạn’Ve đã viết mã này trước, quay lại chọn cơ sở dữ liệu để sử dụng và trên thực tế, bạn phải viết nó mỗi khi bạn kết nối với MySQL. Loại sao chép đó isn’t tốt. Cái đó’s Tại sao bạn chuyển các hằng số cơ sở dữ liệu của mình vào app_config.PHP : Bạn muốn có thể giữ mã luôn giống nhau ở một nơi, thay vì mười hoặc một trăm địa điểm.
Bạn’đã thấy nó dễ dàng như thế nào để yêu cầu một tệp (trừu tượng hóa các giá trị quan trọng thành một tệp riêng biệt) và kéo vào một số giá trị không đổi. Bạn có thể làm điều tương tự với mã kết nối cơ sở dữ liệu của mình. Mở một tệp mới và gọi nó Cơ sở dữ liệu_connection.PHP . Lưu tập lệnh mới này ngay bên cạnh app_config.PHP , và nhập mã sau:
Lỗi kết nối với cơ sở dữ liệu: " . mysql_error () . ""); Echo"Kết nối với mysql!
"; mysql_select_db (cơ sở dữ liệu_name) hoặc chết ("
Lỗi khi chọn cơ sở dữ liệu " . TÊN CƠ SỞ DỮ LIỆU . mysql_error () . "
"); Echo"
Được kết nối với MySQL, sử dụng cơ sở dữ liệu " . TÊN CƠ SỞ DỮ LIỆU . ".
"; ?>
Ghi chú
Đảm bảo con đường của bạn đến app_config.PHP phù hợp với nơi bạn đã lưu trữ tệp đó. nếu bạn’TIẾT KIỆM Dữ liệu-Base_Connection.PHP trong cùng một thư mục với app_config.PHP , Bạn chỉ cần tên tệp, không có bất kỳ đường dẫn thư mục nào.
Bây giờ bạn’Ve có tất cả mã cơ sở dữ liệu của bạn được giấu đẹp, điều đó có nghĩa là bạn có thể đại tu triệt để Run_Query.PHP :
Làm sao’S đó cho mã ngắn? Cũng lưu ý rằng bạn không còn có lý do để yêu cầu app_config.PHP . Kịch bản của bạn yêu cầu Cơ sở dữ liệu_connection.PHP , và nó’S Dữ liệu-Base_Connection.PHP Điều khiển đó mang lại app_config.PHP . Mã của bạn bây giờ đẹp hơn và gọn gàng hơn nhiều.
Chỉ để đảm bảo điều này hoạt động, bạn nên ghé thăm Queryrunner.HTML Trang và nhấp vào Truy vấn chạy. Bạn sẽ nhận được một cái gì đó như Hình 4-8, tất cả không có gì khác ngoài một yêu cầu Trong kịch bản chính của bạn!
Hình 4-8. Có vẻ lạ khi viết một kịch bản mà (ít nhất là cho đến nay) không làm gì nhiều hơn là yêu cầu một tập lệnh khác. Trên thực tế, bạn càng nhận được mã hóa, bạn càng nhiều’sẽ ủng hộ loại tái sử dụng này. Bạn muốn viết đủ mã mới để hoàn thành công việc. Nếu bạn có thể sử dụng lại 100 hoặc 1.000, các dòng mã hiện có, thì bạn nên.
Chạy người dùng của bạn’S SQL truy vấn (một lần nữa)
Tại thời điểm này, cuối cùng bạn cũng có thể kết hợp những gì bạn biết về PHP và những gì bạn biết về SQL. Bạn đã có bất cứ điều gì người dùng đặt vào khu vực văn bản lớn trên biểu mẫu của bạn thông qua $ Yêu cầu Biến, như bạn nhớ là một mảng (biến $ _Request). Và bạn cũng có thể sử dụng mysql_query Để chạy một truy vấn.
Bạn chỉ cần đặt hai thứ đó lại với nhau:
Chỉ cần lấy trường thích hợp từ đầu vào từ biểu mẫu HTML của bạn, chuyển nó sang mysql_query , và bạn’Re tốt để đi. Sau đó, bạn có thể vượt qua tài nguyên PHP được trả lại, $ Kết quả , để xử lý lỗi nếu như tuyên bố, và cuối cùng là mysql_fetch_row để in ra kết quả từ truy vấn.
Câu hỏi thường gặp: Tại sao không tóm tắt chức năng MySQL_Query?
Bạn có thể nhận thấy rằng giống như bạn liên tục kết nối với MySQL, với cùng một tên người dùng và mật khẩu, lặp đi lặp lại và chọn một cơ sở dữ liệu thường’Tôi sẽ gọi mysql_query , Hơn và hơn và hơn. Vậy tại sao không đặt nó vào một tệp khác và yêu cầu tệp đó?
Lý do là ngay trong mã bạn đã viết khi chạy người dùng của bạn’S SQL truy vấn (một lần nữa): Những gì bạn chuyển sang mysql_query sẽ thay đổi gần như mỗi khi bạn gọi nó. Ví dụ, trong kết nối.PHP (Kết nối với cơ sở dữ liệu MySQL), bạn đã vượt qua truy vấn Hiển thị bảng với nó; bây giờ bạn’lại chuyển nó một truy vấn từ trường mẫu trong Queryrunner.HTML. Mặc dù bạn’gọi lại mysql_query hết lần này đến lần khác, những gì bạn’Re đưa ra chức năng đó đang thay đổi, vì vậy nó’S sẽ không giúp bạn rút ra chức năng đó từ các tập lệnh chính của bạn.
Bạn có thể di chuyển mysql_query Ra khỏi kịch bản chính của bạn và chuyển cho nó một phần của tuyên bố liên tục thay đổi truy vấn SQL. Bạn’D cần tạo một chức năng tùy chỉnh lấy truy vấn của bạn từ tập lệnh chính của bạn và tay truy vấn đó mysql_query . Sau đó, khi nào mysql_query Chạy xong, chức năng tùy chỉnh sẽ cần phải truyền lại bất cứ thứ gì nó trả lại cho tập lệnh chính của bạn.
Điều đó có vẻ như là một miệng, và rất nhiều công việc. Nó’S thực sự khá dễ dàng, và một khi bạn bắt đầu viết các chức năng của riêng mình’sẽ làm trong chương 8 - bạn’D không có vấn đề gì khi làm điều đó. Nhưng bạn sẽ đạt được gì? Bạn’D vẫn phải vượt qua trong một truy vấn và nhận lại phản hồi. Bạn’D không thực sự có được bất cứ điều gì từ việc xây dựng chức năng của riêng bạn; Về cơ bản nó sẽ thay thế mysql_query , Nhưng bạn sẽ không’T có được bất kỳ chức năng bổ sung nào, và nó sẽ không’T thêm bất kỳ sự bảo vệ nào khỏi các thay đổi hoặc bất cứ điều gì tương tự vào mã của bạn.
Bây giờ, trước khi bạn đi nghĩ rằng bạn không nên’T lo lắng về loại điều này, hãy dành một phút. Suy nghĩ, “Tôi có thể rút mã này ra một tệp chung khác không? Tôi có nên biến điều này thành một chức năng tùy chỉnh không?” là một điều rất tốt! Bạn muốn nghĩ như vậy, ngay cả khi bạn quyết định - như trường hợp ở đây - nó’S không một điêu tôt. Bạn càng xoay quanh những ý tưởng và cách tiếp cận mã của bạn, bạn càng tốt hơn’sẽ là. Vì vậy, hãy tiếp tục tự hỏi mình những câu hỏi này; Chỉ cần Don’không ngại trả lời câu hỏi của riêng bạn với một, “Không phải cái đó’S không phải là một ý tưởng tuyệt vời trong cái này trường hợp.”
Kịch bản trông khá tốt, vì vậy bây giờ bạn’Re đã sẵn sàng để thực sự thử mọi thứ.
Nhập truy vấn dựa trên web đầu tiên của bạn
Bạn có thể không’T có nhiều trong cơ sở dữ liệu của bạn tại thời điểm này, vì vậy hãy bắt đầu bằng cách tạo một bảng mới có tên URL . Đây’S SQL bạn’LL cần:
Tạo URL bảng (ID int, url varchar (100), mô tả varchar (100));
Tất nhiên, vì bạn’Ve có một khu vực văn bản lớn đẹp, bạn cũng có thể lan truyền điều đó:
Tạo URL bảng (ID int, url varchar (100), mô tả varchar (100))
Dù bằng cách nào, bạn muốn một biểu mẫu trông giống như Hình 4-9.
Hình 4-9. Sử dụng Textarea ở đây cho phép người dùng của bạn nhập SQL tuy nhiên họ thích. Nó’Đây là một điều nhỏ bé, nhưng những bit nhỏ của sự linh hoạt và thiết kế lấy người dùng làm trung tâm làm cho các hình thức web của bạn thú vị hơn rất nhiều để sử dụng. Bạn sẽ không’T muốn viết một câu lệnh SQL dài lớn trong hộp đầu vào khổng lồ trên một dòng, vậy tại sao người dùng của bạn sẽ?
Bây giờ nhấp vào chạy truy vấn chạy. Bạn đã nhận được gì? Vâng, bạn’Có thể nhìn chằm chằm vào một màn hình đáng ngạc nhiên, giống như hình ảnh hiển thị trong Hình 4-10.
Hình 4-10. Đôi khi thông báo lỗi tồi tệ nhất có thể không phải là thông báo lỗi. Không có gì ở đây giúp bạn thấy những gì đã xảy ra với kịch bản của bạn. Trong những trường hợp như thế này, một thông báo lỗi sẽ giúp ích, không gây ra sự thất vọng.
Vâng, những gì đã xảy ra? Nếu bạn muốn thực sự bị nhầm lẫn, hãy nhấp vào nút Quay lại trên trình duyệt của bạn và chạy TẠO NÊN truy vấn một lần nữa. Bạn’sẽ thấy một thông báo như tin nhắn được hiển thị trong Hình 4-11.
Hình 4-11. Đầu tiên, bạn không có gì, và bây giờ là một lỗi. Cái gì’S đang diễn ra? Tệ hơn nữa, mặc dù bạn biết bạn có lỗi, vấn đề thực tế là gì? Ở đó’S vẫn còn nhiều việc phải làm ở đây.
Lần đầu tiên bạn chạy TẠO BẢNG Truy vấn làm bảng với Creat, bạn không có gì cả. Không có kết quả nào. Lần sau, MySQL cho bạn biết URL Bảng đã tồn tại! Trên thực tế, nếu bạn nhảy vào công cụ dòng lệnh của mình, bạn sẽ thấy rằng, vâng, bảng làm tồn tại trong cơ sở dữ liệu của bạn:
mysql> mô tả các url; +-------------+--------------+------+-----+---------+-------+| Trường | Loại | Null | Chìa khóa | Mặc định | Thêm | +-------------+--------------+------+-----+---------+-------+| ID | int (11) | Có | | Null | | | URL | Varchar (100) | Có | | Null | | | Mô tả | Varchar (100) | Có | | Null | | +-------------+--------------+------+-----+---------+-------+3 hàng trong tập hợp (0.00 giây)
Nhìn kỹ vào mã của bạn một lần nữa:
Các nếu như (!$ result) Khối mã không chạy, vì vậy rõ ràng $ Kết quả trở lại như một cái gì đó không phải là sai. Nhưng trong khi Vòng lặp không bao giờ chạy; Bạn chưa bao giờ thấy bất kỳ kết quả nào.
Nhưng đợi một giây. Truy vấn của bạn là một TẠO NÊN truy vấn. Những hàng nào sẽ được trả lại từ loại truy vấn đó? Sẽ không’T là bất kỳ hàng nào, bởi vì bạn’t yêu cầu hàng. Bạn chỉ yêu cầu MySQL tạo một bảng; trên thực tế, một nơi để đặt hàng.
Xử lý các truy vấn mà Don’T Chọn thông tin
Bí mật ở đây là mysql_query rất vui khi nhận được một TẠO NÊN tuyên bố. Nó thậm chí còn làm những gì bạn đã hỏi, đó là lý do tại sao lần thứ hai bạn nhập truy vấn đó, MySQL đã cho bạn một lỗi, nói rằng URL Bảng đã được tạo. Khi mysql_query Nhận một câu lệnh tạo, nó trả về SAI Nếu có một lỗi, đó là kịch bản của bạn xử lý’S không phải là một lỗi. Và nếu có’S không phải là một lỗi, Nó không’t trả về bất kỳ hàng nào . Bạn nhận được một ĐÚNG VẬY giá trị trong $ Kết quả , nhưng không còn gì cả. Và cái đó’S nơi mọi thứ đã sai.
Khi mysql_query nhận được hầu hết các câu lệnh SQL mà Don’T Chọn dữ liệu, như tạo, chèn, cập nhật, xóa, thả và một vài cái khác, nó chỉ trả về ĐÚNG VẬY (nếu mọi thứ hoạt động) hoặc SAI (Nếu họ không’t).
Ghi chú
Một vài trong số các lệnh SQL, như CẬP NHẬT Và XÓA BỎ , Có thể trông mới đối với bạn. Giảng viên đại học’T lo lắng, mặc dù. Họ làm những gì họ trông giống như họ làm: CẬP NHẬT cập nhật thông tin trong một bảng và XÓA BỎ loại bỏ nó. Và khi bạn cần sử dụng các chức năng đó trong cuốn sách này, bạn’sẽ nhận được nhiều chi tiết hơn về chính xác cách sử dụng từng người trong số họ.
May mắn thay, bây giờ bạn đã biết những gì’S đang diễn ra, nó’S không quá khó để giải quyết vấn đề. Bạn chỉ cần tập lệnh của mình để tìm hiểu xem chuỗi truy vấn SQL mà người dùng cung cấp có một trong những từ đặc biệt này. Nếu vậy, bạn phải xử lý nó khác nhau. Và nó chỉ xảy ra bạn’Re rất thoải mái với việc tìm kiếm qua các chuỗi.
Vì vậy, hãy nghĩ điều này thông qua; Những gì bạn thực sự muốn là một cái gì đó như thế này:
- Lấy người dùng’S Truy vấn từ mẫu HTML.
- Chuyển truy vấn vào mysql_query , và lưu trữ kết quả trong một biến.
- Xác định xem kết quả là sai hay không, điều này là xấu cho dù loại SQL nào đã được thông qua.
- Nếu kết quả không sai, hãy xem liệu truy vấn có một trong các từ khóa đặc biệt trong đó không: tạo, chèn, cập nhật, xóa hoặc thả. (Có những người khác, nhưng đây là những cái phổ biến nhất để kiểm tra.)
- Nếu truy vấn có một trong những từ đặc biệt này, hãy xem liệu kết quả của việc chạy truy vấn có đúng hay không và cho người dùng biết mọi thứ đã diễn ra tốt đẹp.
- Nếu truy vấn không có một trong những từ này, hãy thử và in ra các hàng kết quả như bạn’đã làm.
Bạn’đã có rất nhiều mã này, vì vậy bạn chỉ cần thêm một nếu như (hoặc có thể một vài nếu như s, thực sự) và một số tìm kiếm:
$ return_rows = false; $ vị trí = strpos ($ query_text, "tạo"); if ($ location === false) < $location = strpos($query_text, "INSERT"); if ($location === false) < $location = strpos($query_text, "UPDATE"); if ($location === false) < $location = strpos($query_text, "DELETE"); if ($location === false) < $location = strpos($query_text, "DROP"); if ($location === false) < // If we got here, it's not a CREATE, INSERT, UPDATE, // DELETE, or DROP query. It should return rows. $return_rows = true; >>>>>
Cảnh báo
Hãy chắc chắn sử dụng dấu hiệu ba bình đẳng đó ( === ) trong của bạn nếu như báo cáo để kiểm tra xem có $ vị trí là SAI .
Mã này có thể xuất hiện khó khăn, nhưng nó’S đơn giản nếu bạn đi qua nó từng dòng. Về cơ bản, bạn có cùng nếu như tuyên bố, lặp đi lặp lại, với mỗi người có một nếu như tuyên bố:
$ vị trí = strpos ($ query_text, "search_string"); if ($ location === false) < // Try again with another SEARCH_STRING >
Cuối cùng, nếu tất cả nếu như tuyên bố thất bại, sau đó bạn không’t có Tạo, chèn, cập nhật, xóa , hoặc LÀM RƠI Bất cứ nơi nào trong chuỗi truy vấn:
// Đây là câu lệnh nếu ($ location === false) < // If we got here, it's not a CREATE, INSERT, UPDATE, // DELETE, or DROP query. It should return rows. $return_rows = true; >
Nhưng tại sao điều này lại phức tạp như vậy? Vấn đề ở đây là bạn thực sự muốn tìm kiếm người dùng’chuỗi truy vấn s, không chỉ cho một từ phù hợp, như TẠO NÊN hoặc CHÈN , Nhưng đối với nhiều từ phù hợp. Cái đó’S một chút khó khăn, vì vậy bạn’phải làm việc với một cuộc gọi đến Strpos tại một thời điểm.
Ghi chú
Hãy chắc chắn rằng bạn hiểu mã này, nhưng Don’T quá gắn bó với nó. Nó’S thực sự xấu xí, và trong chương tiếp theo, bạn’RE sẽ thêm một công cụ cực kỳ mới vào bộ dụng cụ lập trình PHP của bạn và làm lại mã này để trở thành một nhiều thon thả và bóng bẩy hơn.
Ở mỗi bước, nếu chuỗi tìm kiếm được tìm thấy, người dùng đã đặt vào một trong những từ khóa SQL đặc biệt đó không’t trả về hàng, vì vậy biến $ return_rows được đặt thành SAI , khác với giá trị ban đầu của nó, ĐÚNG VẬY .
Cuối cùng, vào cuối lễ hội tình yêu xoăn xoăn này, nếu như các tuyên bố thư giãn trở lại chương trình chính và một trong hai $ returns_rows có giá trị của ĐÚNG VẬY bởi vì không có tìm kiếm nào phù hợp, hoặc SAI bởi vì một trong số họ đã làm.
Bây giờ bạn’Re đã sẵn sàng để sử dụng $ returns_rows Để in kết quả:
Ghi chú
Nhớ lấy if ($ return_rows) chỉ giống như if ($ return_rows === true) . Tương tự đối với if ($ result) .
Hầu hết kịch bản này đều quen thuộc. Tất cả mã bạn’đã sử dụng để in ra các hàng vẫn giữ nguyên. Mã đó chỉ di chuyển bên trong if ($ return_rows) chặn, vì nó chỉ áp dụng nếu người dùng đặt một cái gì đó như LỰA CHỌN mà trả về (có khả năng) rất nhiều kết quả.
Sau đó, trong khác đến đó nếu như , Kịch bản của bạn chỉ báo cáo liệu mọi thứ có ổn không. Như một sự giúp đỡ bổ sung, phần này của nếu như in ra truy vấn ban đầu để người dùng có thể biết những gì đã được thực hiện.
Bây giờ, về mặt kỹ thuật, bạn không’t thực sự cần điều đó if ($ result) . Vì bạn đã thử nghiệm sớm hơn để xem nếu $ Kết quả là sai, nếu tập lệnh của bạn đến bit cuối cùng này, bạn sẽ biết rằng $ Kết quả là ĐÚNG VẬY , Vì vậy, bạn có thể đơn giản hóa mọi thứ ở cuối một chút:
Kịch bản này đang trở nên dài một chút, nhưng bạn biết mọi dòng đang làm gì vào thời điểm này. Đi trước và dùng thử.
Bạn có thể đã tạo ra URL Bảng (nhập truy vấn dựa trên web đầu tiên của bạn)’T cho bạn biết rằng. Vì vậy, hãy thử vào Thả URL bàn ; Là truy vấn SQL của bạn. Sau đó, chạy truy vấn của bạn và lần này, bạn sẽ nhận lại một tin nhắn hữu ích, cụ thể cho truy vấn không hàng của bạn, như bạn có thể thấy trong Hình 4-12.
Đối phó với con người
Thật không may, ở đó’S vẫn là một vấn đề trong một trong các dòng trong mã trong phần trước. Ngay bây giờ, nếu người dùng của bạn nhập truy vấn sau, điều gì sẽ xảy ra?
Drop bảng URL;
Bộ của bạn nếu như Tuyên bố hiểu rằng LÀM RƠI là một phần của truy vấn, nhận ra nó không có hàng trả lại và việc làm đúng: báo cáo rằng truy vấn đã chạy mà không gặp vấn đề gì hoặc xảy ra lỗi.
Hình 4-12. Bây giờ Run_Query.PHP, như được hiển thị trên trang 119, cho dù đó là’S đã được thông qua một truy vấn với một trong các từ khóa cho biết aren’t bất kỳ hàng trả lại nào. Thông điệp khi mọi thứ diễn ra tốt đẹp vẫn còn hơi ngắn, nhưng ít nhất là ở đó’S không có khoảng trống nào không cố gắng hiển thị các hàng kết quả khi có aren’t bất kỳ hàng kết quả nào để hiển thị.
Nhưng những gì về truy vấn này? Bạn có thấy vấn đề ở đâu không?
Drop bảng URL;
Đây’s Câu lệnh sẽ chỉ ra một trận đấu:
$ vị trí = strpos ($ query_text, "thả"); if ($ location === false) < // this should return true, and so there are no return rows >
Nhưng dòng đó tìm kiếm LÀM RƠI , mà không’t trận đấu “làm rơi” ở tất cả. Strpos tìm kiếm chuỗi, nhưng nó thấy một chữ cái viết thường, như “d”, Là một lá thư khác với chữ hoa “D”. Vì vậy, tìm kiếm tìm thấy “LÀM RƠI” nhưng không “làm rơi” hoặc “làm rơi”.
Và, như mọi khi, bạn’Ve có con người sử dụng ứng dụng của bạn, không phải robot. Bạn có thể’T chỉ cho rằng những người đó sẽ là công dân SQL tốt và luôn sử dụng chữ in hoa. Bạn có thể đặt một tin nhắn nhỏ trên biểu mẫu: Vui lòng nhập SQL của bạn bằng tất cả các chữ cái viết hoa , Nhưng con người sẽ là con người, và họ có xu hướng bỏ qua những hướng dẫn như thế này.
Bạn’chi tiêu ít nhất càng nhiều thời gian của bạn đối phó với yếu tố con người trong mã của bạn như viết mã xử lý cái gọi là dòng hoạt động bình thường. Trên thực tế, một khi bạn thêm người thật vào dòng suy nghĩ của mình, bạn’Tôi sẽ nhận ra rằng “Bình thường” không phải là’T một khái niệm rất hữu ích. Thay vào đó, mã của bạn chỉ đơn giản là phải đối phó với nhiều khả năng như bạn có thể tưởng tượng (và một số bạn có thể’t).
Khắc phục vấn đề chữ thường và chữ hoa hóa ra khá đơn giản: bạn có thể chỉ cần chuyển đổi $ query_String cho tất cả các chữ cái viết hoa trước khi bắt đầu tìm kiếm thông qua nó:
$ return_rows = false; $ query_text = strtouper ($ query_text);
$ vị trí = strpos ($ query_text, "tạo"); // tất cả các khối lồng nhau nếu các khối.
Bây giờ, nếu người dùng loại Thả URL bàn hoặc Thả URL bàn , Chuỗi tìm kiếm là Thả URL bàn , và tìm kiếm “LÀM RƠI” sẽ trả lại một trận đấu.
Nhưng ở đó’s Một vấn đề khác! Trước khi đọc tiếp, xem liệu bạn có thể tìm ra nó là gì không.
Ghi chú
Vâng, thực sự có nhiều nếp nhăn và vấn đề chỉ với một chương trình đơn giản. Cái đó’S Tại sao có rất nhiều lập trình viên, nhưng rất ít lập trình viên thực sự tuyệt vời: sự khác biệt là xử lý tất cả những chi tiết nhỏ này mà không ném iPhone của bạn qua một bức tường gần đó.
Tránh thay đổi đầu vào của người dùng bất cứ khi nào có thể
Để phát hiện ra vấn đề tiềm năng này với tập lệnh truy vấn của bạn, hãy xem phần cuối cùng của mã của bạn’S Chạy nếu người dùng nhập truy vấn không có hàng như thả hoặc chèn:
// Không có hàng. Chỉ báo cáo nếu truy vấn chạy hay không Echo "Truy vấn của bạn đã được xử lý thành công.
"Echo"
";
Chạy mã này và bạn’sẽ nhận được một cái gì đó như bạn thấy trong Hình 4-13.
Hình 4-13. Đôi khi vấn đề tốt nhất bạn có thể giải quyết là vấn đề không’t vẫn xảy ra. Nhìn kỹ vào truy vấn SQL ở đây và so sánh nó với truy vấn trong Hình 4-12. Loại công việc thám tử tẻ nhạt này mất nhiều giờ, nhưng nó’S hoàn toàn quan trọng để khiến các ứng dụng web hoạt động trong thế giới thực.
Ghi chú
nếu bạn’Làm theo sau, bạn có thể cần phải Thả URL bàn ; Trước khi bạn có thể TẠO NÊN nó một lần nữa, hoặc TẠO NÊN bàn trước khi bạn có thể LÀM RƠI Nó.
So sánh cẩn thận mã trong Hình 4-12 và Hình 4-13. Trong Hình 4-13, bạn’LL thông báo mọi thứ đều ở chữ hoa. Điều đó có ý nghĩa, vì để tìm kiếm dễ dàng hơn, bạn đã thêm dòng này vào tập lệnh của mình:
$ query_text = strtouper ($ query_text);
Sau đó, khi bạn xuất ra $ query_text Cuối cùng, đầu ra được hiển thị trong tất cả các chữ cái chữ hoa. Đây có phải là một vấn đề lớn? Vâng, nó không’dường như là, ít nhất là không ở đây. Nhưng nó tiết lộ một cái gì đó: sau đó $ query_text Chuỗi được chuyển đổi thành chữ hoa, bất cứ lúc nào nó’s đã sử dụng, nó’S sẽ trở lại với tất cả các chữ cái viết hoa. Vì vậy, giả sử truy vấn ban đầu là một cái gì đó như thế này:
Chọn * từ người dùng trong đó last_name = "maclachlan";
Bây giờ hãy xem xét cùng một truy vấn này, đã biến thành tất cả các chữ cái chữ hoa:
Chọn * từ người dùng trong đó last_name = "maclachlan";
Tin hay không, đây không phải là cùng một truy vấn. LỰA CHỌN —Và hầu hết các truy vấn SQL khác đều sẽ đối xử với họ “Maclachlan” như hoàn toàn khác với “Maclachlan.” Vì vậy, hai truy vấn đó hoàn toàn không giống nhau.
Hiện tại, điều này không’T Tạo bất kỳ rắc rối nào. Kịch bản của bạn không bao giờ chạy lại truy vấn và mysql_query chạy với $ query_text trước nó đã biến thành phiên bản chữ hoa của nó. Nhưng đây là một vấn đề đang chờ xảy ra.
Nói chung, bạn muốn cố gắng tránh thay đổi trực tiếp đầu vào từ người dùng. Cái đó’s bởi vì bạn nhận được chính xác loại vấn đề này: bạn có thể cần sử dụng lại đầu vào đó và một khi bạn’đã thay đổi nó, bạn có thể’T quay lại.
May mắn thay, phương thuốc rất đơn giản: thay vì thay đổi người dùng’Thay vào đó, bạn sử dụng một biến mới để lưu trữ phiên bản chữ hoa của truy vấn:
$ return_rows = false; $ uppercase_query_text = strtouper ($ query_text);
$ vị trí = strpos ($ query_text, "tạo");
Bạn nên sử dụng biến mới này trong tất cả các so sánh chuỗi của mình:
$ return_rows = false; $ uppercase_query_text = strtouper ($ query_text);$ vị trí = strpos ($ uppercase_query_text, "Tạo");
if ($ location === false) <$ vị trí = strpos ($ uppercase_query_text, "chèn");
if ($ location === false) <$ vị trí = strpos ($ uppercase_query_text, "update");
if ($ location === false) <$ vị trí = strpos ($ uppercase_query_text, "xóa");
if ($ location === false) <$ vị trí = strpos ($ uppercase_query_text, "thả");
if ($ location === false) < // If we got here, it's not a CREATE, INSERT, UPDATE, // DELETE, or DROP query. It should return rows. $return_rows = true; >>>>>
Một sự thay đổi nhỏ như vậy, nó bảo vệ bạn trong trường hợp bạn cần sử dụng chuỗi truy vấn đó một lần nữa.
Và chỉ như vậy bạn’thực sự có một công cụ sẽ thực hiện bất kỳ truy vấn SQL nào bạn ném vào nó. Nhưng ở đó’s làm việc vẫn cần làm. Tất cả mã tìm kiếm đó thực sự làm lộn xộn tập lệnh của bạn và ở đó’S chỉ không có xung quanh nó: Kịch bản của bạn khá khó hiểu lúc đầu (và thậm chí là giây). Trong chương tiếp theo, bạn’sẽ giải quyết tất cả những điều này, lấy hình thức của bạn từ một hình thức tiện dụng cơ bản đến một bài tập thực sự tốt về cơ bắp PHP của bạn.
Người dùng quyền lực’ Phòng khám: Nhận cụ thể với vị trí và không gian trắng cắt
Trong chương này, bạn’Ve chắc chắn làm Run_Query.PHP Tốt hơn rất nhiều, nhưng vẫn còn một số vấn đề. Giả sử ai đó đã viết SQL như thế này:
Chọn * từ Nhà đăng ký_activities trong đó Tên = 'Cập nhật GPA' hoặc name = 'Thả một lớp'
Đây là một LỰA CHỌN tuyên bố, vì vậy Run_Query.PHP nên chạy SQL và in ra tất cả các hàng được trả về từ truy vấn này. Nhưng ở đó’là một vấn đề nhỏ khó chịu, isn’t đó?
Chuẩn rồi. Mã của bạn tìm kiếm “cập nhật” Và “làm rơi” sẽ báo cáo rằng truy vấn này có cả hai từ trong đó và chỉ cần trả lại “SQL của bạn đã được chạy mà không có vấn đề gì.” Nhưng điều đó là vấn đề!
Để giải quyết vấn đề, hãy nghĩ về cấu trúc của SQL. Những từ khóa đặc biệt đó - Tạo, chèn , Và bạn bè của họ - tất cả đều là Đầu tiên từ trong truy vấn. Vì vậy, bạn cần phải có được vị trí của trận đấu và xem vị trí đó có phải là vị trí 0 không. Bạn có thể làm điều đó bằng cách thêm vào nếu như điều kiện và sử dụng hoặc toán tử trong PHP:
if ($ vị trí === false || $ vị trí> 0)Đường ống đôi (||) có nghĩa là “hoặc” đến PHP. Vì vậy, dòng mã nói, nếu có’S không có trận đấu nào cả ( $ vị trí === Sai ) hoặc trận đấu isn’t bắt đầu ở vị trí đầu tiên (vị trí 0), sau đó tìm từ khóa tiếp theo. Tất nhiên, bạn’D phải thay đổi tất cả nếu như các tuyên bố, thậm chí còn lộn xộn hơn. Vì vậy, sửa chữa này là một cải tiến, mặc dù một trong đó thực sự làm rõ mã của bạn hơn nữa.
Nhưng nó trở nên tồi tệ hơn! Bạn’Re đối phó với con người thực sự, và con người làm những điều buồn cười. Giả sử ai đó nhập SQL này vào biểu mẫu của bạn:
Tạo URL bảng (ID int, url varchar (100), mô tả varchar (100));Bây giờ bạn’ve có một vấn đề mới: đây không phải là’t a LỰA CHỌN , Nhưng mã tìm kiếm của bạn đã thắng’T tìm một trong những từ đặc biệt ngay từ đầu. Nhân vật đầu tiên chỉ là một không gian: “ ”.
Nhưng bạn cũng có thể giải quyết vấn đề này, bằng cách sử dụng một chức năng quen thuộc khác: Cắt. Cắt Loại bỏ khoảng trắng và nếu bạn làm điều đó trước khi tìm kiếm, thì bạn nên ở trong tình trạng tốt:
$ uppercase_query_text = trim (strtouper ($ query_text));Điều đó có vẻ như là một tấn công việc cho một hình thức thực sự đơn giản, một textarea. Nhưng khi bạn’Làm việc với đầu vào của người dùng, bạn muốn liên tục nghĩ về những gì người dùng có thể làm. Và làm thế nào bạn có thể giúp tránh họ nhìn thấy điều gì đó kỳ lạ hoặc mắc lỗi. Nghĩ như vậy, và bạn’RE sẽ xây dựng các ứng dụng web tốt hơn, ổn định hơn, thú vị hơn.
Lấy PHP & MySQL: Hướng dẫn thiếu Bây giờ với O’Nền tảng học tập Reilly.
O’Các thành viên Reilly trải nghiệm sách, các sự kiện trực tiếp, các khóa học được quản lý bởi vai trò công việc và nhiều hơn nữa từ O’Reilly và gần 200 nhà xuất bản hàng đầu.
Có cần sử dụng PHP để kết nối với MySQL không
Có cần sử dụng PHP để kết nối với MySQL không, tôi đang làm việc ứng dụng máy tính để bàn và không có kiến thức về PHP có bất kỳ loại nào trong lớp xây dựng hoặc chức năng có thể được sử dụng để kết nối với MYSQL mặc dù có nhiều chương trình có mặt trên Internet để không thể sử dụng được không. Có bất kỳ tài liệu tham khảo nào hay tôi có thể có ví dụ từng bước liên quan đến công việc. Cấu hình mysql có cài đặt mặc định. Giống như tên người dùng là root và mật khẩu là trống tên máy chủ của tôi là máy chủ cục bộ.
39.3K 4 4 Huy hiệu vàng 37 37 Huy hiệu bạc 59 59 Huy hiệu Đồng
Hỏi ngày 19 tháng 10 năm 2011 lúc 23:00
7 4 4 Huy hiệu đồng
Tôi đã gắn thẻ cái này là PHP và MySQL và xóa các thẻ flex. Câu hỏi này không liên quan gì đến Flex.
Ngày 20 tháng 10 năm 2011 lúc 0:34
3 câu trả lời 3
KHÔNG. PHP là ngôn ngữ lập trình. MySQL là cơ sở dữ liệu. Cài đặt MySQL và nhập MySQL từ dòng lệnh và bạn sẽ kết nối với MySQL bằng MySQL.
Đã trả lời ngày 19 tháng 10 năm 2011 lúc 23:02
10.7K 11 11 Huy hiệu vàng 61 61 Huy hiệu bạc 113 113 Huy hiệu đồng
Nhưng làm cách nào để kết nối với cơ sở dữ liệu, tôi có thể có một số tham chiếu để kết nối với nó.Tôi không thể làm như vậy adobe có một số trong thư viện xây dựng mà tôi cần biết hoặc một số tài liệu tham khảo khác mà tôi có thể kết nối với cơ sở dữ liệu.Vui lòng cần trợ giúp về chủ đề này.
Chức năng MySQL
Ghi chú:
Hầu hết các hàm MySQL đều chấp nhận link_identifier là tham số tùy chọn cuối cùng. Nếu nó không được cung cấp, kết nối mở cuối cùng được sử dụng. Nếu nó không tồn tại, kết nối được cố gắng thiết lập với các tham số mặc định được xác định trong PHP.ini . Nếu nó không thành công, các chức năng trở lại SAI .
Mục lục
- mysql_affected_rows - Nhận số lượng hàng bị ảnh hưởng trong hoạt động MySQL trước đó
- mysql_client_encoding - Trả về tên của bộ ký tự
- mysql_close - Đóng kết nối MySQL
- mysql_connect - Mở kết nối với máy chủ MySQL
- mysql_create_db - Tạo cơ sở dữ liệu MySQL
- mysql_data_seek - di chuyển con trỏ kết quả nội bộ
- MySQL_DB_NAME - Lấy tên cơ sở dữ liệu từ cuộc gọi đến mysql_list_dbs
- mysql_db_query - chọn cơ sở dữ liệu và thực thi truy vấn trên đó
- mysql_drop_db - thả (xóa) cơ sở dữ liệu MySQL
- mysql_errno - Trả về giá trị số của thông báo lỗi từ hoạt động MySQL trước đó
- mysql_error - Trả về văn bản của thông báo lỗi từ hoạt động MySQL trước đó
- mysql_escape_string - thoát một chuỗi để sử dụng trong mysql_query
- mysql_fetch_array - lấy hàng kết quả như một mảng kết hợp, một mảng số hoặc cả hai
- mysql_fetch_assoc - lấy hàng kết quả như một mảng kết hợp
- mysql_fetch_field - lấy thông tin cột từ kết quả và trả về dưới dạng đối tượng
- mysql_fetch_lengths - Nhận độ dài của mỗi đầu ra trong một kết quả
- MySQL_Fetch_Object - Lấy hàng kết quả như một đối tượng
- mysql_fetch_row - Nhận một hàng kết quả như một mảng được liệt kê
- mysql_field_flags - nhận các cờ được liên kết với trường được chỉ định trong kết quả
- mysql_field_len - Trả về độ dài của trường được chỉ định
- mysql_field_name - lấy tên của trường được chỉ định trong kết quả
- mysql_field_seek - Đặt con trỏ kết quả thành một trường bù được chỉ định
- mysql_field_table - lấy tên của bảng Trường được chỉ định ở
- mysql_field_type - lấy loại trường được chỉ định trong kết quả
- mysql_free_result - bộ nhớ kết quả miễn phí
- mysql_get_client_info - Nhận thông tin máy khách MySQL
- mysql_get_host_info - Nhận thông tin máy chủ MySQL
- mysql_get_proto_info - Nhận thông tin giao thức MySQL
- mysql_get_server_info - Nhận thông tin máy chủ MySQL
- mysql_info - Nhận thông tin về truy vấn gần đây nhất
- mysql_insert_id - Nhận ID được tạo trong truy vấn cuối cùng
- MySQL_LIST_DBS - Danh sách cơ sở dữ liệu có sẵn trên máy chủ MySQL
- mysql_list_fields - Liệt kê các trường bảng MySQL
- mysql_list_processes - liệt kê các quy trình MySQL
- mysql_list_tables - liệt kê các bảng trong cơ sở dữ liệu MySQL
- mysql_num_fields - Nhận số trường trong kết quả
- mysql_num_rows - Nhận số lượng hàng trong kết quả
- MySQL_PConnect - Mở kết nối liên tục đến máy chủ MySQL
- mysql_ping - ping kết nối máy chủ hoặc kết nối lại nếu không có kết nối
- mysql_query - Gửi truy vấn MySQL
- mysql_real_escape_string - thoát các ký tự đặc biệt trong một chuỗi để sử dụng trong câu lệnh SQL
- mysql_result - Nhận dữ liệu kết quả
- mysql_select_db - chọn cơ sở dữ liệu MySQL
- mysql_set_charset - Đặt bộ ký tự máy khách
- mysql_stat - nhận trạng thái hệ thống hiện tại
- mysql_tablename - Nhận tên bảng của trường
- mysql_thread_id - trả về id chủ đề hiện tại
- mysql_unbuffered_query - Gửi truy vấn SQL đến MySQL mà không cần tìm nạp và đệm các hàng kết quả
Người dùng đóng góp Ghi chú 38 Ghi chú
15 năm trước
# Có thể liên lạc với Dhirendra được tạo ra tại Dhirendrak tại Yahoo Dot Com
# Tập lệnh này được tạo để kiểm tra chênh lệch dữ liệu giữa hai bảng
# Khi cấu trúc của cả hai bảng giống nhau.
# Giới hạn:
# 1) Cấu trúc của cả hai bảng phải giống nhau.
# 2) Tên của cả hai bảng phải khác nhau nhưng nếu giống nhau
# Bảng thứ hai phải là nếu cơ sở dữ liệu khác nhau.
# 3) Nếu sử dụng hai cơ sở dữ liệu so với cả hai quyền cơ sở dữ liệu phải giống nhau
# vì tôi đang sử dụng bí danh để lấy thông tin.
#
# Sử dụng ::
# 1) Điều này có thể hữu ích khi bạn thực hiện một số thay đổi trong
# tập lệnh và bạn mong đợi đầu ra nhất định. Vì vậy, với sự giúp đỡ của điều này
# chức năng Bạn có thể so sánh tác động do những thay đổi của bạn trong tập lệnh.
#
#
?php
$ host = ""; # Tên máy chủ hoặc địa chỉ IP
$ user = ""; # Tên người dùng cơ sở dữ liệu
$ pass = ""; # Mật khẩu cơ sở dữ liệu
$ cơ sở dữ liệu = ""; # tên DataAbase mà bạn muốn kết nối
# Nhận kết nối với MySQL
$ dblink = @ mysql_connect ($ host, $ user, $ pass);
# Chọn và mở cơ sở dữ liệu
mysql_select_db (cơ sở dữ liệu $, $ dblink);
$ db1 = "< your db1 >"; // cơ sở dữ liệu đầu tiên
// cơ sở dữ liệu thứ hai nếu cơ sở dữ liệu giống nhau cho cả hai bảng hơn là sử dụng giống như db1
$ db2 = "< your db2 >";
$ Bảng1 = "< your table1 >"; // Bảng đầu tiên
// Bảng thứ hai nếu cơ sở dữ liệu giống nhau cho cả hai bảng so với tên bảng
# phải khác nhau nhưng tên trường giống nhau và thứ tự của các trường giống nhau.
// chức năng bắt đầu ở đây
function tabl
Toàn cầu $ dblink;
$ SQL1 = "Hiển thị các trường từ $ đầu tiên";
$ result = mysql_query ($ sql1, $ dblink) hoặc die ("có lỗi trong thực thi 1 = từ khóa">. mysql_error ());
while ($ row = mysql_fetch_object ($ result))
<
$ from_fields [] = $ row -> trường;
>
$ sql = "Chọn * từ $ đầu tiên";
$ res = mysql_query ($ sql, $ dblink) hoặc die ("có lỗi trong thực thi 2 = từ khóa">. mysql_error ());
$ j = 1;
while ($ row = mysql_fetch_array ($ res))
$ num = đếm ($ từ_fields);
$ sql_next = "Chọn $ Second .* từ $ thứ hai trong đó ";
for ($ i = 0; $ i < $num ; $i ++)
$ sql_next = $ sql_next . "" . $ thứ hai . "." . $ from_fields [$ i]. "= '" . $ row [$ from_fields [$ i]]. "' Và " ;
>
$ SQL_NEXT = SUBSTR ($ SQL_NEXT, 0, STRLEN ($ SQL_NEXT)- 5);
$ res_next = mysql_query ($ sql_next, $ dblink) hoặc die ("có lỗi trong thực thi 3 = từ khóa">. mysql_error ());
$ num1 = mysql_num_rows ($ res_next);
if ($ num1 == 0)
for ($ i = 0; $ i < count ( $from_fields ); $i ++)
$ val = $ val . "
" . $ from_fields [$ i]. "Từ khóa">. $ row [$ from_fields [$ i]];
>
// hiển thị bản ghi không khớp.
tiếng vang "
\N" . $ j . "." . $ val;
tiếng vang "
-----------------------------------------------------";
$ j ++;
>
$ đầu tiên = $ db1 . '.' . $ Bảng1;
$ second = $ db2 . '.' . $ Bảng 2;
Table_Data_Difference ($ đầu tiên, $ giây);
16 năm trước
Đối với người dùng Windows, xin lưu ý:
Nếu apache được cài đặt dưới dạng dịch vụ và bạn thay đổi biến đường dẫn để nó có thể đạt đến libmysql.DLL, bạn sẽ cần khởi động lại máy của mình để có các thay đổi được áp dụng.
15 năm trước
Ngoài ra, để bảo mật dữ liệu MySQL và để có thể tuân thủ các tiêu chuẩn PCI, bạn nên mã hóa dữ liệu. Có rất nhiều cách để làm điều đó. Đối với tin tặc, bạn có thể sử dụng dm-crypt (www.Saout.DE/MISC/DM-CRYPT) Công cụ. Về cơ bản nó được sử dụng để mã hóa toàn bộ phân vùng. Nếu bạn muốn một giải pháp tinh vi, hãy với tổng bảo mật cho MySQL từ Gói General (www.GóiGeneral.com)
Trên Windows, bạn có thể sử dụng tính năng mã hóa đĩa được cung cấp bởi chính Windows hoặc công cụ như Trucrypt (www.TrueCrypt.org)
15 năm trước
@Amanda 12-tháng 10-2007 09:58
Tôi gần như phải tự hỏi mình nếu đây là một câu hỏi thực sự. Nếu máy chủ MySQL từ chối nỗ lực kết nối thì có, MySQL sẽ có thể gửi lại lỗi cho PHP. Và nếu PHP không thể truy cập máy chủ MySQL đích thì nó cũng đủ thông minh để tự đưa ra lỗi thích hợp.
17 năm trước
Nếu bạn muốn làm cho PHP hoạt động tốt với MySQL, ngay cả với Apache, trong các hệ thống dựa trên Windows, hãy thử XAMPP, từ Apache Friends. Nó tiết kiệm lộn xộn với các tệp config, đây là vấn đề lớn duy nhất với việc cố gắng khiến cả ba làm việc cùng nhau trong Windows.
17 năm trước
Một lưu ý về tài nguyên
Khi một tài nguyên (e.g. một định danh liên kết) hết phạm vi, nó bị xóa và tài nguyên máy tính liên quan (e.g. Liên kết TCP đến cơ sở dữ liệu) cũng sẽ bị chấm dứt. Càng xa càng tốt!
Tuy nhiên, trong mã sau, liên kết TCP MySQL vẫn tồn tại cho đến khi kết thúc thực thi:
$ Conn = mysql_connect ('tên máy chủ', 'tên người dùng', 'mật khẩu');
$ Conn = null;
ngủ (30);
?>
Điều này là do nội bộ, trình nhận dạng liên kết đang được lưu, do đó các chức năng MySQL tiếp theo sẽ hoạt động. Dường như không có cách nào để xóa tham chiếu nội bộ này.
Tuy nhiên, nếu bạn mở 2 kết nối, hệ thống cũ nhất sẽ bị xóa tự động (vì vậy kết nối với tên máy chủ sẽ chấm dứt tại câu lệnh $ Conn = null, kết nối với hostName2 sẽ tồn tại cho đến khi kết thúc tập lệnh).
$ Conn = mysql_connect ('tên máy chủ', 'tên người dùng', 'mật khẩu');
$ Conn2 = mysql_connect ('hostName2', 'tên người dùng', 'mật khẩu');
$ Conn = null;
$ Conn2 = null;
ngủ (30);
?>
17 năm trước
Tôi sử dụng IIS 6, PHP 5.04, Windows Server 2003 và MySQL 4.1.11. Và đây là những gì tôi đã có thể tìm ra.
Để cho MySQL và PHP nói chuyện với nhau, trong PHP.CFG, đừng quên bật thẻ
CGI.Force_Redirect = 0 và đảm bảo bạn đặt nó ở 0 (nó là mặc định ở mức 1. Chỉ cần xóa bán đại tá từ phía trước nó để kích hoạt nó trong mã) thì phpinfo sẽ nói rằng việc đọc CFG từ thư mục cài đặt PHP của bạn thay vì root windows của bạn. Sau đó, PHPINFO của bạn sẽ hiển thị mục MYSQL rằng một số người có thể gặp khó khăn với. Không có cài đặt đăng ký hoặc sao chép bất cứ điều gì là cần thiết. Cũng theo dõi phần còn lại của sự trợ giúp tuyệt vời từ các bình luận của người dùng. Đây là những gì tôi đã làm, để làm cho nó đơn giản:
Tôi đã tạo một thư mục trong cây thư mục ngay phía trên các tệp chương trình (khám phá máy tính của bạn) và đặt tên nó là PHP. Tôi trích xuất .phiên bản ZIP PHP vào nó (không phải phiên bản cài đặt tự động). Tôi đã chỉnh sửa PHP.INI-được đề xuất, đổi tên nó thành chỉ PHP, thêm tên người dùng SQL của tôi, tên cơ sở dữ liệu, v.v.(Bạn thực sự phải nhìn kỹ vào tệp CFG và đảm bảo bạn không bỏ qua điều gì đó). Đã bật tiện ích mở rộng = php_mysql.DLL (chỉ cần xóa bán đại tá trước mặt nó). Đã thêm thư mục PHP vào đường dẫn (hướng dẫn về cách thực hiện việc này khá đơn giản và được ghi lại ở trên). Tôi cũng đã cung cấp thư mục ext cho đường dẫn, nhưng tôi không chắc nó có thực sự cần thiết không. Các bình luận của người dùng là những gì thực sự đã giúp tôi, vì vậy tôi nghĩ rằng tôi sẽ trả lại sự ủng hộ và cố gắng mở rộng về chủ đề này một chút.
18 năm trước
Vấn đề fedora mysql!!
Trong fedora 3, mô -đun php mysql không đi kèm với cài đặt mặc định. Để cài đặt nó, hãy sử dụng $> yum cài đặt php_mysql
Nếu bạn không làm điều này, bạn sẽ gặp lỗi với các chức năng mysql như mysql_connect ()
Hi vọng điêu nay co ich!
18 năm trước
Nếu bạn muốn sao chép đầu ra của `mysql - -html`, hãy in kết quả của bạn trong bảng HTML, hãy xem chức năng này:
21 năm trước
Xin chào, đây là một mẹo nhỏ hay để chọn các bản ghi theo thứ tự ngẫu nhiên từ bảng trong cơ sở dữ liệu MySQL trước phiên bản 3.23
Chọn *, (itemId/itemId) *rand () làm myrandom từ các mục đặt hàng của myrandom
[Biên tập viên Lưu ý: Và chỉ "Chọn * từ Foo Order by rand ()" sau 3.23]
15 năm trước
Sau khi cuối cùng nhận được IIS, PHP và MySQL trên máy Windows XP mới, tôi đã quyết định viết các bước tôi thực hiện để bạn có thể thấy nó đã được thực hiện như thế nào: http: // www.Atksolutions.com/bài viết/install_php_mysql_iis.HTML
Hi vọng điêu nay co ich.
15 năm trước
/*
Cài đặt máy chủ MySQL (Cộng đồng) trên Windows XP 32 bit đang chạy Apache
?php
Trên Windows, cách được khuyến nghị để chạy MySQL là cài đặt nó dưới dạng dịch vụ Windows, theo đó MySQL bắt đầu và dừng tự động khi Windows bắt đầu và dừng. Máy chủ MySQL được cài đặt dưới dạng dịch vụ cũng có thể được điều khiển từ các lệnh dòng lệnh hoặc với tiện ích dịch vụ đồ họa như phpmyadmin.
Php ---> Đầu nối MySQL (PHP_MYSQL.DLL và PHP_MYSQLI.DLL làm phần mở rộng)
MySQL cung cấp tiện ích mở rộng MySQL và MySQLI cho hệ điều hành Windows trên http: // dev.mysql.com/tải xuống/đầu nối/php/cho mysql phiên bản 4.1.16 trở lên, MySQL 5.0.18 và MySQL 5.1. Như với việc cho phép bất kỳ tiện ích mở rộng PHP nào trong PHP.ini (chẳng hạn như PHP_MYSQL.dll), phần mở rộng chỉ thị php_dir phải được đặt thành thư mục nơi đặt các phần mở rộng PHP.
MySQL không còn được bật theo mặc định, vì vậy PHP_MYSQL.DLL DLL phải được bật bên trong PHP.ini. Ngoài ra, PHP cần truy cập vào thư viện máy khách MySQL. Một tệp có tên libmysql.DLL được bao gồm trong phân phối Windows PHP và để PHP nói chuyện với MySQL tệp này cần có sẵn cho đường dẫn Windows Systems.
Tập lệnh PHP sau rất hữu ích để kiểm tra kết nối PHP với MySQL.
*/
// $ kết nối = mysql_connect ("Tên máy chủ của bạn", "Thư mục gốc MySQL", 'mật khẩu MySQL, nếu có');
// $ kết nối = mysql_connect ("Tên hoặc địa chỉ máy chủ - 127.0.0.1 "," root ", 'mật khẩu');
$ Connect = MySQL_Connect ("LocalHost", "Root", 'Mật khẩu');
Nếu ($ kết nối) Echo "Xin chúc mừng!\N
";
Echo "kết nối thành công với máy chủ cơ sở dữ liệu MySQL.\N
";
> other $ error = mysql_error ();
echo "không thể kết nối với cơ sở dữ liệu. Lỗi = $ Lỗi .\N
";
lối ra();
>
// Kết nối đóng
$ đóng = mysql_close ($ kết nối);
if ($ đóng) echo "\ n
";
Echo "Bây giờ đóng kết nối. \N
";
Echo "Kết nối MySQL cũng đóng thành công.\N
";
> Elseecho "Có một vấn đề trong việc đóng kết nối MySQL.\N
";
>
lối ra();
?>
16 năm trước
Tôi đã thực hiện chức năng này để giảm các cuộc gọi DB. Bạn có thể lưu trữ kết quả MySQL trong phiên VAR và sắp xếp kết quả trên bất kỳ cột nào. Có thể hoạt động tốt trong một ứng dụng ajax.
hàm mysql_sort ($ results, $ sort_field, $ dir = "asc") $ temp_array = mảng ();
$ i = 0;
foreach ($ kết quả là $ res) $ temp_array [$ i] = $ res [$ sort_field];
$ i ++;
>
if ($ dir == "ASC") asort ($ temp_array);
> other Arsort ($ temp_array);
>
$ new_results = mảng ();
$ i = 0;
foreach ($ temp_array là $ k => $ v) $ new_results [$ i] = $ kết quả [$ k];
$ i ++;
>
ksort ($ new_results);
trả lại $ new_results;
//sử dụng
if (đếm ($ _ phiên ["res"]) == 0) $ _session ["res"] = [Nhận kết quả cơ sở dữ liệu tuy nhiên bạn có thể]
>
$ _Session ["res"] = mysql_sort ($ _ phiên ["res"], $ _Request ["sort"], $ _Request ["dir"]);
17 năm trước
John Coggeshall đã viết một tập lệnh tương thích PHP5 ext/mysqli cho các ứng dụng vẫn sử dụng các chức năng ext/mysql cũ. Điều này ngăn cản sự rắc rối của việc cố gắng có cả phần mở rộng MySQL và MySQLI được tải trong PHP5, có thể khó khăn.
17 năm trước
Kích hoạt MySQL với Windows Server 2003/IIS 6.0:
Tìm PHP của bạn.Tệp INI trước, kiểm tra phpinfo () để xem PHP hiện đang tìm kiếm PHP ở đâu.ini. (Tôi.e. Sử dụng Trình cài đặt Windows cho Php 5.0.4, PHP.Tệp INI được đặt trong C: \ Windows Dir.) Tôi khuyên bạn nên sử dụng trình cài đặt - đi với cài đặt thủ công đầy đủ.
Đặt phần sau trong PHP.Ini:
display_errors = ON
error_Reporting = e_all
Điều này sẽ đảm bảo rằng bạn sẽ thấy bất kỳ lỗi nào phát sinh trong quá trình cấu hình. Đảm bảo sửa những điều này khi bạn đã chơi xong với PHP.Ini! Không để các cài đặt này như thế này trên máy sản xuất.
Trong PHP.Ini đặt như sau:
extension_dir = "pathToExtensions (ususally [yourPathTophp] \ ext)"
Tiện ích mở rộng = PHP_MYSQL.DLL (đảm bảo điều này chưa được thông qua nếu nó đã có trong PHP của bạn.ini)
Trong IIS, mở các tiện ích mở rộng dịch vụ web, nhấp vào "Thêm tiện ích mở rộng dịch vụ web mới. "
Nhập PHP cho tên mở rộng
Trong các tệp bắt buộc:
Thêm [yourpathtophp] \ php5isapi.DLL
Thêm [yourpathTophp] \ php5ts.DLL
Nhấp vào 'Áp dụng' sau đó nhấp vào 'OK'
Tạo các trang web như bạn thường làm, nhưng đảm bảo rằng chúng có quyền thực thi, không chỉ là truy cập tập lệnh. Trong tab "Thư mục gia đình", nhấp vào 'Cấu hình'. Cuộn xuống danh sách ở trên cùng và xem liệu bạn có thể tìm thấy PHP không. Nếu bạn làm như vậy, hãy đảm bảo đường dẫn đến thực thi cho PHP là chính xác. Nếu bạn không tìm thấy PHP trong danh sách, nhấp vào 'Thêm. ', sau đó duyệt đến thực thi chính xác, [yourpathTophp] \ php5isapi.DLL và bấm OK. Trong trường mở rộng, nhập 'PHP'. Động từ nên được đặt thành 'tất cả các động từ', hãy để nó như vậy.
Tạo một trang kiểm tra với mã này:
Gọi nó là kiểm tra.PHP và đặt tệp này vào trang web bạn vừa tạo. Duyệt đến trang, tốt nhất là với Firefox;), và đảm bảo rằng bạn có phần MySQL với một số thông tin MySQL trong đó. Nếu không, thì đường dẫn của bạn có thể bị hỏng, hoặc bạn vẫn không chỉnh sửa đúng PHP.ini (một lần nữa, hãy nhìn vào vị trí mà phpinfo () hiển thị cho bạn, và chỉ cần chỉnh sửa nó ở đó nếu bạn phải, sau đó di chuyển nó sau đó và re-config).
mysql_connect
Phần mở rộng này đã được không dùng nữa trong PHP 5.5.0, và nó đã bị xóa trong Php 7.0.0. Thay vào đó, phần mở rộng MySQLI hoặc PDO_MYSQL nên được sử dụng. Xem thêm MySQL: Chọn hướng dẫn API. Giải pháp thay thế cho chức năng này bao gồm:
Sự miêu tả
mysql_connect
Chuỗi $ server = ini_get ("mysql.default_host ") ,
Chuỗi $ username = ini_get ("mysql.người dùng mặc định") ,
Chuỗi $ mật khẩu = ini_get ("mysql.mật khẩu mặc định") ,
bool $ new_link = SAI ,
int $ client_flags = 0
): Tài nguyên | SAI
Mở hoặc sử dụng lại kết nối với máy chủ MySQL.
Thông số
Máy chủ MySQL. Nó cũng có thể bao gồm một số cổng. e.g. "Tên máy chủ: Cổng" hoặc đường dẫn đến ổ cắm cục bộ E.g. ":/path/to/Ổ cắm" cho localhost.
Nếu chỉ thị PHP MySQL.Default_host không được xác định (mặc định), thì giá trị mặc định là 'localhost: 3306'. Trong chế độ an toàn SQL, tham số này bị bỏ qua và giá trị 'localhost: 3306' luôn được sử dụng.
Tên người dùng. Giá trị mặc định được xác định bởi MySQL.người dùng mặc định. Trong chế độ an toàn SQL, tham số này bị bỏ qua và tên của người dùng sở hữu quy trình máy chủ được sử dụng.
Mật khẩu. Giá trị mặc định được xác định bởi MySQL.mật khẩu mặc định. Trong chế độ an toàn SQL, tham số này bị bỏ qua và mật khẩu trống được sử dụng.
Nếu một cuộc gọi thứ hai được thực hiện cho mysql_connect () Với các đối số tương tự, sẽ không có liên kết mới nào được thiết lập, nhưng thay vào đó, định danh liên kết của liên kết đã mở sẽ được trả về. Tham số new_link sửa đổi hành vi này và tạo ra mysql_connect () luôn mở một liên kết mới, ngay cả khi mysql_connect () được gọi trước đó với các tham số tương tự. Trong chế độ an toàn SQL, tham số này bị bỏ qua.
Tham số client_flags có thể là sự kết hợp của các hằng số sau: 128 (bật dữ liệu tải xử lý cục bộ), Mysql_client_ssl , Mysql_client_compress , Mysql_client_ignore_space hoặc Mysql_client_interactive . Đọc phần về hằng số máy khách MySQL để biết thêm thông tin. Trong chế độ an toàn SQL, tham số này bị bỏ qua.
Trả về giá trị
Trả về một định danh liên kết MySQL khi thành công hoặc SAI về thất bại.
Ví dụ
Ví dụ 1 mysql_connect () ví dụ
$ link = mysql_connect ('localhost', 'mysql_user', 'mysql_password');
nếu như (! $ link) Die ('Không thể kết nối:' . mysql_error ());
>
echo 'kết nối thành công';
mysql_close ($ link);
?>?php
Ví dụ #2 mysql_connect () Ví dụ sử dụng tên máy chủ: Cú pháp cổng
// Chúng tôi kết nối với ví dụ.com và cổng 3307
$ link = mysql_connect ('ví dụ.com: 3307 ',' mysql_user ',' mysql_password ');
nếu như (! $ link) Die ('Không thể kết nối:' . mysql_error ());
>
echo 'kết nối thành công';
mysql_close ($ link);
?php
// Chúng tôi kết nối với Localhost tại Cảng 3307
$ link = mysql_connect ('127.0.0.1: 3307 ',' mysql_user ',' mysql_password ');
nếu như (! $ link) Die ('Không thể kết nối:' . mysql_error ());
>
echo 'kết nối thành công';
mysql_close ($ link);
?>
Ví dụ #3 mysql_connect () Ví dụ bằng cách sử dụng cú pháp ":/path/to/Ổ cắm"
// Chúng tôi kết nối với localhost và ổ cắm e.g. /TMP/MySQL.bít tất
?php
// Biến thể 1: Bỏ qua Localhost
$ link = mysql_connect (':/tmp/mysql', 'mysql_user', 'mysql_password');
nếu như (! $ link) Die ('Không thể kết nối:' . mysql_error ());
>
echo 'kết nối thành công';
mysql_close ($ link);
// Biến thể 2: Với localhost
$ link = mysql_connect ('localhost:/tmp/mysql.Sock ',' mysql_user ',' mysql_password ');
nếu như (! $ link) Die ('Không thể kết nối:' . mysql_error ());
>
echo 'kết nối thành công';
mysql_close ($ link);
?>
Ghi chú
Ghi chú:
Bất cứ khi nào bạn chỉ định "localhost" hoặc "localhost: port" là máy chủ, thư viện máy khách MySQL sẽ ghi đè lên điều này và cố gắng kết nối với ổ cắm cục bộ (có tên là đường ống trên Windows). Nếu bạn muốn sử dụng TCP/IP, hãy sử dụng "127.0.0.1 "Thay vì" Localhost ". Nếu thư viện máy khách MySQL cố gắng kết nối với ổ cắm cục bộ sai, đường dẫn chính xác sẽ được đặt làm MySQL.Default_host trong PHP.INI và trường máy chủ để trống.
Ghi chú:
Liên kết đến máy chủ sẽ được đóng ngay khi thực hiện tập lệnh kết thúc, trừ khi nó đóng sớm hơn bằng cách gọi rõ ràng mysql_close () .
Ghi chú:
Lỗi "Không thể tạo ổ cắm TCP/IP (10106)" thường có nghĩa là chỉ thị cấu hình biến . Trên Windows, nếu môi trường không được sao chép, biến môi trường hệ thống sẽ không có sẵn và PHP sẽ gặp sự cố khi tải winsock.
Xem thêm
- mysql_pconnect () - Mở kết nối liên tục đến máy chủ MySQL
- mysql_close () - Đóng kết nối MySQL
Người dùng đóng góp ghi chú 36 Ghi chú
10 năm trước
Hãy cẩn thận ở đây nếu bạn sử dụng UTF8.
Tệp DB.Lựa chọn cơ sở dữ liệu của bạn phải chứa các dòng sau:
Mặc định-Character-SET = UTF8
Mặc định-thu thập = UTF8_General_Ci
Nó có nghĩa là cơ sở dữ liệu của bạn được tạo để sử dụng các ký tự UTF8.
Một cách để thực hiện điều này là:
Tạo cơ sở dữ liệu My_Database ký tự mặc định Set UTF8 Collate UTF8_General_Ci;
Sau đó, sau khi kết nối với nó từ PHP, bạn nên sử dụng:
mysql_set_charset ("UTF8", $ Connection);
Nếu bạn không làm điều này, bạn sẽ gặp sự cố xấu trong trường hợp phần mềm khác đang đọc và ghi vào cùng một cơ sở dữ liệu.
15 năm trước
Quá nhiều vấn đề kết nối có thể là do một số vấn đề.
1. bạn đang sử dụng pconnect. Điều này có thể kết nối nhiều kết nối và không thực sự cần thiết cho mysql vì các kết nối mới thực sự rất nhanh.
2. Trẻ em Apache đang quanh quẩn quá lâu - kết hợp điều này với pconnect và bạn có công thức cho thảm họa.
Gợi ý: Giảm thời gian các quy trình con Apache vẫn kết nối với khách hàng và có bao nhiêu kết nối trước khi chúng bị giết. Và không sử dụng pconnect.
6 năm trước
FCGID_MODULE MODULES/MOD_FCGID.Vì thế
FCGIDMAXREQUESTLEN 209715200
FCGIDConnectTimeout 240
Fcgidiotimeout 240
Fcgidbusyscaninterval 240
Fcgidbusytimeout 240
# Esta línea usteruye al servidor web para que reconozca un tipo nuevo (PHP)
AddHandler fcgid-script .PHP
# Esta línea indica al servidor web dondre está instalado php.
Fcgidinitialenv PHPRC "C:/PHP"
# Esta línea indica al servidor web que debe ejecutar la aplicación
# PHP-CGI.exe cuando un khách (navegador) Solicite una página con
# sự mở rộng .PHP
Fcgidwrapper "C:/PHP/PHP-CGI.exe " .PHP
# Con esta línea damos los permisos necesarios para que los khách hàng
# ACCEDER/EJECUTAR A LOS ARCHIVOS .PHP
Các chỉ mục tùy chọn theo dõi liên kết bao gồm execcgi
Cho phép không có
Cho phép từ tất cả
16 năm trước
Trong trường hợp bất kỳ ai khác nhận được "máy khách không hỗ trợ giao thức xác thực được yêu cầu bởi máy chủ; xem xét nâng cấp máy khách MySQL". Vấn đề là phương thức băm mật khẩu mới được sử dụng bởi mysql> = 4.1 được đề cập dưới đây.
Cập nhật PHP của bạn lên v5 trong đó mật khẩu mới được hỗ trợ hoặc sử dụng old_password () trong mysql 4.1.
Cập nhật MySQL.người dùng đặt mật khẩu = old_password ("youroldhashpassword") trong đó người dùng = 'yourUserId' và host = 'yourHost'
9 năm trước
$ spojeni = mysql_connect ($ server, $ login, $ pass) hoặc die ('nelze se pripojit');
mysql_select_db ($ db, $ spojeni);
mysql_query ("Đặt tên 'UTF8'");
?>
15 năm trước
Mysql_client_ssl không hoạt động, sử dụng mysqli và mysqli-> ssl_set ()
13 năm trước
Hy vọng rằng điều này sẽ giúp ai đó đau buồn.
Máy tính Dev của tôi là Windows và chạy Wampserver. Tôi có vấn đề thường xuyên với PHP không thể kết nối với MySQL sau thời gian hoạt động DB cực đoan.
Câu chuyện dài, đó là vì tôi đã không chạy MySQL qua các pipes được đặt tên và Windows đã hết các cổng có sẵn để phục vụ PHP. Rõ ràng, trên Windows, bạn có 5000 cổng để làm việc và một khi chúng được mở, chúng vẫn như vậy trong 120 giây trước khi được phát hành. Điều này gây ra sự cố với mysql/mạng vì một cổng mới được yêu cầu cho mỗi kết nối.
Bạn có thể đọc thêm về vấn đề tại:
(Liên kết quá lâu và phải chia tay)
http: // dev.mysql.com/doc/refman/5.0/en
/không thể kết nối tới máy chủ.HTML#không thể kết nối với máy chủ trên cửa sổ
?>
Vì MySQL đang ở trên localhost, tôi chỉ có thể bật các-pipes (đó là cách bạn nên thiết lập mysql nếu bạn không cần kết nối mạng) để giải quyết vấn đề thay vì cách giải quyết được liệt kê trên trang đó.
20 năm trước
Chỉ trong trường hợp bạn không biết. Bạn có thể sử dụng mysql_connect trong một hàm để kết nối với cơ sở dữ liệu và kết nối là một siêu toàn cầu. có nghĩa là bạn có thể sử dụng mysql_query trong các chức năng khác hoặc không có chức năng nào cả và PHP sẽ sử dụng kết nối mà bạn đã mở. Đây là một chút kiến thức tiện dụng giúp nếu bạn có một trang web lớn với nhiều tập lệnh. Nếu bạn tạo một hàm để kết nối với DB và gọi hàm đó trong tất cả các tập lệnh của bạn, nó sẽ giúp bảo trì mã dễ dàng hơn vì bạn chỉ phải cập nhật một dòng mã để thay đổi kết nối MySQL của bạn thay vì cập nhật tất cả các tập lệnh của bạn.
15 năm trước
Việc sử dụng các kết nối MySQL có thể trở nên khó khăn với các đối tượng. Tôi đang sử dụng mysql_connect () trong lớp cơ sở dữ liệu mà tôi đã viết và trình phá hủy lớp gọi mysql_close. Bởi vì tôi có một số đối tượng cơ sở dữ liệu này, mysql_connect tái sử dụng các kết nối hiện có. Điều này là tốt ngoại trừ khi tập lệnh đạt đến kết thúc thực thi và bộ sưu tập garabage của PHP gọi tất cả các hàm __destruct () của Php. mysql_close () đưa ra cảnh báo rằng kết nối không hợp lệ, trong trường hợp của tôi cho một đối tượng. Điều này đang xảy ra với các đối tượng sử dụng kết nối hiện có, vì kết nối đã bị đóng. Tôi đã giải quyết vấn đề bằng cách buộc mysql_connect () để tạo kết nối mới mỗi lần. Điều này không hiệu quả nhưng bây giờ là đủ cho mục đích của tôi.
Tôi sẽ không nói đây là một lỗi per-se, nhưng đó là điều cần chú ý. Tôi tưởng tượng sử dụng mysqli là giải pháp cuối cùng.
15 năm trước
Đôi khi, tôi muốn dịch vụ MySQL bắt đầu tự động khi ứng dụng của tôi cần. Điều này đặc biệt đúng nếu bạn làm việc trong PC phát triển và/hoặc trong môi trường mạng nội bộ nhỏ.
Bạn có thể làm điều gì đó như thế này: Nếu hàm mysql_connect () trả về sai, hãy cố gắng buộc khởi tạo dịch vụ MySQL!
Ví dụ: dưới Windows:
$ link = @ mysql_connect ($ server, $ user, $ pass);
if (trống ($ link)) @ exec ("%systemroot%\\ system32 \\ net.exe bắt đầu mysql ");
ngủ (5);
$ link = @ mysql_connect ($ servidor, $ usuario, $ clave);
>
?>
Trong Linux tất nhiên bạn có thể thử "/etc/init.D/MySQLD bắt đầu "Nhưng bạn sẽ cần quyền đặc biệt.
16 năm trước
Nếu giữa cuộc gọi thứ nhất và thứ hai với cùng một đối số thì có một cuộc gọi khác với một đối số khác, liên kết kết nối ban đầu không được sử dụng lại, nhưng kết nối mới được tạo thay thế, bất kể đối số new_link.
Ví dụ: ở đây chỉ có một liên kết duy nhất sẽ được mở và sau đó được sử dụng lại:
$ link1 = mysql_connect ("localhost");
$ link2 = mysql_connect ("localhost");
?>
Và ở đây _Three_ các liên kết riêng biệt sẽ được mở:
$ link1 = mysql_connect ("localhost");
$ link3 = mysql_connect ("127.0.0.1 ");
$ link2 = mysql_connect ("localhost");
?>
Vì vậy, nếu bạn muốn chuyển đổi giữa các kết nối chỉ bằng cách gọi đến mysql_connect và dựa vào bộ nhớ đệm liên kết nội bộ của nó, bạn có thể lãng phí kết nối cơ sở dữ liệu của mình.
13 năm trước
Bất cứ khi nào bạn mở hai kết nối với một cơ sở dữ liệu,
Bạn có thể không gặp bất kỳ lỗi nào khi chọn DB hiện có.
$ db1 = mysql_connect ( . );
mysql_select_db ('exition_db', $ db1);
$ db2 = mysql_connect ( . );
mysql_select_db ('not_existing_db', $ db2);
mysql_query (. , $ db2);
// sẽ trả về không có lỗi và truy vấn sẽ không được thực thi.
?>
Hãy chú ý và bạn có thể tiết kiệm vài giờ gỡ lỗi.
12 năm trước
Nếu bạn gặp sự cố tốc độ bằng cách sử dụng lệnh này vào máy chủ xa, bạn có thể thêm dòng "Skip-name-resolv.CNF để sửa nó.
19 năm trước
Để sử dụng dữ liệu tải chức năng Infile cục bộ từ MySQL (tại MySQL 4.0.16, Php 4.3.3), đặt tham số thứ năm của mysql_connect () thành client_local_files (128), dựa trên API MySQL C (cũng
Cảm ơn 'phpweb tại eden2 dot com' để chỉ ra điều này
16 năm trước
Việc bổ sung các mục vào HTTPD.Conf để dừng lại .Các tệp Inc được Apache phục vụ chắc chắn là hữu ích và được đề xuất.
Nhưng nó không thay đổi thực tế rằng các tệp này phải có thể đọc được bởi Apache để bộ xử lý PHP có thể nhận được.
Miễn là bạn không có nhiều, có thể không đáng tin cậy, người dùng trên máy của bạn thì không sao. Nhưng khi bạn đang điều hành một dịch vụ nhiều người dùng lớn với hàng ngàn người dùng, một trong số họ sẽ nhìn vào .các tệp inc và ghi chú mật khẩu bạn có trong đó. Họ thậm chí có thể sao chép chúng vào tập lệnh của riêng họ và sửa đổi cơ sở dữ liệu của bạn!
Ngay cả khi người dùng cục bộ được tin cậy, luôn có khả năng của một tập lệnh lừa đảo (PHP hoặc một số ngôn ngữ khó khăn hơn) được cài đặt bởi người dùng không biết gì. Kịch bản đó sau đó có thể đọc .Tệp Inc (cho dù chúng có ở trong cây xuất bản web hay không) và hiển thị mật khẩu của bạn.
19 năm trước
Một giải pháp khác cho các vấn đề bảo mật của việc đặt tên người dùng và mật khẩu vào tập lệnh. Tôi chưa tìm thấy tài liệu này ở bất cứ nơi nào khác vì vậy tôi nghĩ rằng tôi đề nghị nó cho tài liệu trực tuyến. .
Không đặt mật khẩu cho MySQL vào các tập lệnh có thể được đọc bởi bất kỳ người dùng nào trên máy. Thay vào đó đặt chúng vào tệp cấu hình Apache và đảm bảo rằng nó không thể đọc được thế giới. (Apache đọc các tệp cấu hình chính của nó dưới dạng gốc.)
Ví dụ: thêm cái này vào httpd của bạn.Conf (và chmod nó đến 600 hoặc 660) sau đó bảo Apache của bạn tự tải lại (Apachectl duyên dáng).
PHP_VALUE MySQL.Default_user Fred
PHP_VALUE MySQL.Default_Password Secret
PHP_VALUE MySQL.Default_host Server.ví dụ.com
Thì tất cả những gì bạn cần trong mã PHP của mình là
$ xử lý = mysql_connect () hoặc chết (mysql_error ());
Mật khẩu vv sẽ chỉ được chọn bởi các tập lệnh chạy trong thư mục được đặt tên (hoặc một thư mục phụ). Điều tương tự có thể được thực hiện cho ảo.
Nếu bạn không muốn tiếp tục tải lại máy chủ Apache của mình thì bạn đã kiểm tra mọi thứ khi đặt các chỉ thị PHP_VALUE vào (thế giới có thể đọc được) .HTACCESS FILE. (Rõ ràng là không sử dụng sản xuất.)
Nếu bạn cần gỡ lỗi các giá trị đang được cung cấp (hoặc không) thì hãy sử dụng đoạn trích này:
@SysLog (log_debug, "sử dụng user =".ini_get ("mysql.người dùng mặc định").
"Pass =".ini_get ("mysql.mật khẩu mặc định").
"host =".ini_get ("mysql.Default_host "));
.)
12 năm trước
Tình huống của tôi: "Tôi có thể kết nối với MySQL từ PHP thông qua Apache và MySQL thông qua bảng điều khiển MySQL và không thể kết nối qua PHP"
Nhưng, PHP chỉ có thể kết nối với MySQL bằng MySQL_Connect ("LocalHost", "Root", "Mật khẩu");
"Selinux của nó không cho phép Apache tạo các kết nối từ xa"
Giải pháp:
setsebool -p httpd_can_network_connect = 1
15 năm trước
Gần đây, tôi đã thấy một vấn đề khó hiểu khi tôi có thể kết nối với MySQL từ PHP thông qua Apache và MySQL thông qua bảng điều khiển MySQL và không thể kết nối thông qua PHP-CLI. Đây là trong Windows (XP). Tôi thường sử dụng tiện ích mở rộng mysqli, nhưng cũng đã thử mysql và cả hai đều từ chối làm việc.
Tôi đã khởi động lại dịch vụ nhiều lần và PHP-CLI vẫn sẽ không kết nối.
Điều này cuối cùng đã xóa.
Tôi chắc chắn sẽ dừng dịch vụ. Sau đó, tôi đã tải xuống một gói nhị phân có khóa kéo từ dev.mysql.com và khởi động máy chủ một vài lần từ dòng lệnh (mysqld/mysqld-nt, trong đó mysqld-nt được điều chỉnh cụ thể cho windows) và dừng nó ("mysqladmin shutdown"). Sau đó, tôi đã có thể kết nối thành công từ PHP -CLI ("PHP -R" mysql_connect ('localhost', 'root', ''); ").
Đảm bảo rằng nó đã bị dừng, tôi đã bắt đầu máy chủ thông thường từ dòng lệnh và điều đó đã thành công. Sau đó tôi đã dừng nó và bắt đầu nó thông qua bảng dịch vụ, và mọi thứ vẫn hoạt động.
Tôi cho rằng khi dịch vụ được khởi động lại ban đầu, có một thành phần đã chết và từ chối tắt mặc dù dịch vụ dường như bị dừng lại, nhưng tắt nó qua Mysqladmin đã giết chết mọi thứ hoàn toàn.
13 năm trước
Lưu ý rằng đường ống được đặt tên trên Windows là không thể sử dụng được vì PHP 5.3 và kết nối TCP sẽ được sử dụng ngay cả trong localhost.
16 năm trước
Bài đăng từ 'Graham_rule tại Ed dot ac dot uk' nên bao gồm cảnh báo sau:
WARING: Các giá trị của các chỉ thị này sẽ được hiển thị nếu bất kỳ mã nào bao gồm hàm phpinfo ().
Hàm phpinfo () sẽ in các giá trị này rõ ràng như ngày. Tôi rất đề xuất chống lại phương pháp lưu trữ thông tin xác thực MySQL này.
Tôi khuyên bạn nên tạo các chức năng kết nối và dọn dẹp trong một tệp bao gồm riêng biệt. Nếu bảo mật là một mối quan tâm, hãy xác định vị trí tệp bao gồm bên ngoài thư mục gốc web của bạn.
hàm getMyConnection ()
Toàn cầu $ g_link;
if ($ g_link)
trả về $ g_link;
$ g_link = mysql_connect ('máy chủ.Tên ',' người dùng ',' mật khẩu ') hoặc chết (' không thể kết nối với máy chủ.');
mysql_select_db ('cơ sở dữ liệu_name', $ g_link) hoặc chết ('không thể chọn cơ sở dữ liệu.');
trả về $ g_link;
>
chức năng cleanupdb ()
Toàn cầu $ g_link;
if ($ g_link != Sai)
mysql_close ($ g_link);
$ g_link = false;
>
?>
Đơn giản chỉ cần bao gồm liên kết của bạn.Tệp PHP trong tập lệnh của bạn và bất cứ nơi nào bạn sử dụng hàm mysql_query () bao gồm một cuộc gọi đến hàm getMyConnection ().
$ res = mysql_query ("Chọn . ", GetMyConnection ());
?>
15 năm trước
Nếu bạn đang cố gắng mở nhiều kết nối MySQL với cùng một người dùng, mật khẩu và tên máy chủ MySQL, bạn phải đặt $ new_link = true để ngăn MySQL_Connect sử dụng kết nối hiện có.
Ví dụ: bạn đang mở hai kết nối riêng biệt đến hai cơ sở dữ liệu khác nhau (nhưng trên cùng một máy chủ và với cùng một người dùng và mật khẩu):
$ db1 = mysql_connect ($ dbhost, $ dbuser, $ dbpass);
$ rv = mysql_select_db ($ dbname1, $ db1);
$ db2 = mysql_connect ($ dbhost, $ dbuser, $ dbpass);
$ rv = mysql_select_db ($ dbname2, $ db2);
Tại thời điểm này, cả $ db1 và $ db2 sẽ chọn cơ sở dữ liệu được đặt tên bởi $ dbname2.
Giải pháp thay thế là yêu cầu kết nối MySQL thứ hai là mới:
$ db1 = mysql_connect ($ dbhost, $ dbuser, $ dbpass);
$ rv = mysql_select_db ($ dbname1, $ db1);
$ db2 = mysql_connect ($ dbhost, $ dbuser, $ dbpass, true);
$ rv = mysql_select_db ($ dbname2, $ db2);
Bây giờ, $ db1 nên đã chọn $ dbname1 và $ db2 nên đã chọn $ dbname2.
Điều này đã được ghi lại trên trang mysql_select_db.
Lưu ý: Điều này chỉ xảy ra khi các tham số máy chủ, tên người dùng và mật khẩu giống hệt nhau cho mỗi câu lệnh mysql_connect.
11 năm trước
Kết nối di động: Nếu bạn di chuyển mã nguồn của mình từ một đến các máy chủ khác nhau và bạn muốn tránh cấu hình lại trên một giao dịch viên mới, người dùng cờ $ _server ['server_name'] như:
Switch ($ _Server ['server_name']))
<
trường hợp 'server1.ví dụ.com ':
mysqlconnect ('host1', 'user1', 'password1');
mysql_select_db ('db1');
phá vỡ;
trường hợp 'server2.ví dụ.com ':
mysqlconnect ('host2', 'user2', 'password2');
mysql_select_db ('db2');
phá vỡ;
>
?>
Điều này làm cho một kết nối có điều kiện với cơ sở dữ liệu MySQL. Nó tự động chọn máy chủ chính xác theo tên máy chủ từ nơi tập lệnh của bạn chạy.
Hy vọng, bạn thích cấu hình di động này.
16 năm trước
Nếu bạn muốn sử dụng tên máy chủ thay vì IP trên chuỗi kết nối của mình trong tập lệnh (để có thể thay đổi IP theo ý muốn), nhưng không muốn chi phí tìm kiếm DNS, chỉ cần thêm tệp/etc/máy chủ của bạn (trong Windows: %Windir %/System32/Trình điều khiển/ETC/Hosts).
Ví dụ: thêm phần sau vào tệp máy chủ của bạn (thay đổi IP không có thật vào IP thực của máy chủ của bạn):
Lưu ý: Trên Linux, hãy đảm bảo bạn có "Đặt hàng: Máy chủ, BIND" trên /etc /máy chủ của bạn.Tệp conf.
Trên một tập lệnh, hãy làm cho kết nối MySQL như vậy:
$ sid = mysql_connect ("mysqlserver1", "user", "pass");
?>
Lưu ý: Mẫu này thuộc PHP, nhưng nó có thể là bất kỳ ngôn ngữ lập trình nào khác (chỉ nhập "Ping MySQLServer1" trên lời nhắc, trên máy chủ của bạn)
Và bạn có nó rồi đấy! Nếu máy chủ của bạn từng được gán một IP khác, chỉ cần cập nhật tệp máy chủ với tệp mới (mỗi tập lệnh sẽ hoạt động như hiện tại, ngay cả khi dưới các tên máy chủ khác nhau).
10 năm trước
Một lưu ý nhỏ nếu tập lệnh của bạn ngủ nhiều, bạn muốn chạy chính xác cùng một câu lệnh SQL 2+ lần và bạn có lỗi "MySQL đã biến mất" rất nhiều.
Hãy thử đặt tham số thứ 4 thành true vì dường như đôi khi PHP không phát hiện ra ID tài nguyên đó x mà nó sử dụng cho lần tra cứu giống hệt cuối cùng bây giờ là DUD và do đó cố gắng sử dụng nó, do đó bỏ qua các bài kiểm tra như is_resource () và gây ra lỗi.
Điều này là cho khi tất nhiên là mysql_ping () không hoạt động cho tình huống của bạn.
18 năm trước
Trong mysql4.1 và sau đó, định dạng băm mật khẩu mặc định đã thay đổi làm cho nó không tương thích với 3.X khách hàng.
Tôi đã phát hiện ra mysql_connect () hoạt động trên các phiên bản máy chủ> = 4.1 Khi mật khẩu người dùng MySQL của bạn trống vì xác thực mật khẩu không được thực hiện trong trường hợp đó, nếu không bạn cần sử dụng một phương thức kết nối khác (e.g. mysqli).
Ngoài ra, nếu bạn đang sử dụng các bảng MySQL cũ trên một máy chủ mới (tôi.e. Mật khẩu được lưu trữ ở định dạng cũ), sau đó máy chủ sẽ tự động sử dụng phương thức auth cũ và chức năng này sẽ hoạt động trong mọi trường hợp.
Hy vọng rằng điều này sẽ giúp ai đó, nó đã khiến tôi bối rối trong một thời gian vì một số người dùng trên 4 của tôi.1 máy chủ có thể kết nối và một số không thể.
16 năm trước
Bao giờ tự hỏi "tên người dùng mặc định" là gì?
$ link = mysql_connect () hoặc die (mysql_error ());
$ result = mysql_query ("select session_user (), current_user ();");
$ row = mysql_fetch_row ($ result);
echo "Người dùng phiên:", $ Row [0], "
\N" ;
Echo "Người dùng hiện tại:", $ Row [1], "
\N" ;
?>
Cả hai đều là ODBC@localhost trong cài đặt Win2K của tôi, vì vậy lời khuyên của tôi cho Windows là:
- Tạo người dùng MySQL có tên ODBC mà không có mật khẩu
- Thêm localhost vào người dùng ODBC [nhấp chuột phải vào ODBC]
- Đặt lược đồ trước ODBC@localhost
- sử dụng mysql_connect () không có parm hoặc không sử dụng;)
Điều này cũng chuyển sang hoạt động với ODBC_Connect:
ODBC_Connect ("MyDSN", "", "" ")
9 năm trước
Xin chào tất cả mọi người.
Sử dụng "127.0.0.1 "Thay vì" localhost "cho PHP5.4-win7 nếu bạn cảm thấy tốc độ chậm.Vì win7 sử dụng mặc định ipv6.
"Localhost" dành cho IPv4.
14 năm trước
Tôi chỉ muốn chia sẻ một trình bao bọc chung mà tôi sử dụng để thực hiện một câu lệnh SQL một dòng. Nó là một trình bao bọc dễ sử dụng để chăm sóc kết nối mở/đóng. Tùy chọn, MySQL_Connect có thể được thay thế bằng mysql_pconnect cho các kết nối liên tục.
Function ExecuteQuery ($ Query, $ DB, $ NOCON)
if ($ nocon != "Nocon")
if ($ db != "") Kết nối ($ dB);
khác kết nối ("pascal_crm");
$ result = mysql_query ($ truy vấn);
$ err = mysql_error ();
if ($ err != "") echo "error = $ err";
if ($ nocon != "Nocon")
mysql_close ();
Trả về $ kết quả;
>
17 năm trước
Kết nối với MySQL thông qua đường ống được đặt tên dưới Windows:
trong tôi.ini, thêm cái này:
Sau đó kết nối với máy chủ, sau đó kết nối với MySQL bằng cách sử dụng
14 năm trước
Khi bạn kết nối và mong đợi sử dụng một quy trình được lưu trữ, bạn phải chuyển một lá cờ đặc biệt cho MySQL thông qua lệnh Connect, nếu không bạn sẽ không nhận được kết quả được trả về và nó sẽ dẫn đến lỗi này:
Thủ tục Alexgrim.GetStats_ForumC Categories không thể trả về một kết quả được đặt trong bối cảnh đã cho
Để khắc phục điều này, thay đổi chuỗi kết nối của bạn, thêm ", false, 65536" là 2 trường cuối cùng:
$ this-> con = mysql_connect ($ this-> h, $ this-> u, $ this-> p, false, 65536);
13 năm trước
Nếu bạn đang gặp lỗi "Không thể gán địa chỉ được yêu cầu", bạn có thể gặp sự cố với cổng MySQL. Tôi vừa chuyển máy chủ của mình sang Mac OS X 10.6 và mysql_connect đã gây ra lỗi này. Đi vào /etc /php.Tệp INI và đặt số cổng mặc định thành 3306 đã sửa lỗi.
PHP.Tệp INI gợi ý rằng PHP sẽ chọn cổng bằng cách sử dụng $ mysql_tcp_port hoặc mục nhập MySQL-TCP trong /etc /dịch vụ, nhưng trong trường hợp này không phải vậy thì không phải vậy. /vv/dịch vụ trên máy của tôi có 3306 được liệt kê, nhưng nó không được chọn.
Đây là một loại báo cáo lỗi, trong đó tính năng được ghi lại không hoạt động. Xin đừng xóa điều này cho đến khi cộng đồng quyết định làm thế nào để giải quyết vấn đề. Đây là một trong những bài tập kéo tóc để sửa chữa.
13 năm trước
Nếu bạn đang nhận được các lỗi MySQL như #2006: Máy chủ MySQL đã biến mất và bạn đang sử dụng mysql_connect () và pcntl_fork () thì hãy làm cho bạn đang kết nối lại với máy chủ MySQL với mỗi đứa trẻ được tạo mà bạn đã tạo ra ().
Tôi đã kéo tóc ra trong nhiều ngày vì tôi đã sử dụng cùng một kết nối MySQL cho mỗi đứa trẻ và nhận được lỗi "MySQL Server đã biến mất".
Đây là một ví dụ đơn giản:
$ link = mysql_connect ($ db_server, $ db_user, $ db_pass);
mysql_select_db ($ db_database, $ link));
$ pid = pcntl_fork ();
if ($ pid == - 1)
// lỗi cho trẻ em
otherif ($ pid) // cha mẹ sẽ ở đây
> other // đứa trẻ phải tạo ra một kết nối * mới * mysql.
// Nếu bạn sử dụng mysql_connect mà không có tham số thứ 4
// Sau đó, nó sẽ sử dụng kết nối từ cha mẹ. Nhưng
// Nếu trẻ chết, kết nối sẽ không thể chịu đựng được
// cha mẹ cũng vậy.
// Vì vậy, lưu ý "True" là tham số thứ 4.
$ newLink = mysql_connect ($ db_server, $ db_user, $ db_pass, true);
mysql_select_db ($ db_database, $ newlink));
// .
>
?>
15 năm trước
. Lưu ý nhận xét của anh ấy ở cuối mã để giải thích.]
Có vẻ như tôi đã học được điều này một cách khó khăn:
// Thiết lập kết nối với máy chủ DB chính
mysql_connect (db_host, db_user, db_password);
mysql_select_db (db_name);
// Thiết lập kết nối với cụm nô lệ chỉ đọc
$ objmysql_read = mysql_connect (nô lệ_db_host, nô lệ_db_user, nô lệ_db_password);
mysql_select_db (db_name, $ objmysql_read);
$ strsql = "Chọn col1, col2 từ" . Db_name . "." . "TBL1 trong đó 1 = 1";
$ objrs = mysql_query ($ strsql, $ objmysql_read); // Trả về dữ liệu từ nô lệ
$ strsql = "chèn vào" . Db_name . "." . "Các giá trị TBL1 (COL1, COL2) (Val1, Val2)";
// Hành vi mong đợi, để chèn câu lệnh cuối cùng vào DB chính, vì nó không tham chiếu tài nguyên chỉ đọc một cách rõ ràng. Thay vào đó, nó chèn bản ghi vào kết nối cuối cùng, mặc dù không nên, vì kết nối cuối cùng không phải là kết nối toàn cầu/ẩn danh như cái đầu tiên, đó là $ objmysql_read.
// Bạn sẽ thoát khỏi Sync DB trên cụm của mình trừ khi bạn xác định rõ ràng tất cả các tài nguyên kết nối
11 năm trước
Sau khi nâng cấp mysql sever lên 5.5.21 từ 5.0.9 Trên Centos, WINXP của tôi đã ngừng có thể kết nối với máy chủ với thông báo lỗi
'Bắt tay xấu'.
Giải pháp cuối cùng cho vấn đề là loại bỏ mysql_client_ssl khỏi cuộc gọi đến mysql_connect ().
Tôi cũng sẽ báo cáo đây là một lỗi.
14 năm trước
Nếu bạn cố gắng kết nối với một máy chủ từ xa, đây là một vài điều có thể sai. Có lẽ danh sách này sẽ cứu ai đó một thời gian:
1. Bạn có thể cần phải liên lạc với hỗ trợ công nghệ của máy chủ từ xa:
Một. Để đảm bảo rằng bạn có thể vượt qua tường lửa của nó. Nó không nhất thiết phải đủ để có số máy chủ của bạn được liệt kê trong danh sách máy chủ truy cập từ xa của trang web của người nhận. Nó phụ thuộc vào cách công ty máy chủ có mọi thứ được thiết lập;
b. Để tìm hiểu số cổng họ đang sử dụng cho các kết nối cơ sở dữ liệu, có thể không phải là mặc định được sử dụng bởi mysql_connect;
c. Nếu bạn đang sử dụng ODBC, máy chủ mà bạn đang cố gắng kết nối có thể cài đặt hoặc không có trình điều khiển ODBC nào; Và
d. Nếu bạn đang làm việc từ IP động, chúng có thể được thiết lập để chứa nó hoặc bạn có thể phải sử dụng proxy. Xem http: // forge.mysql.com/wiki/mysql_proxy .
2. Nếu bạn đang làm việc từ một máy chủ được chia sẻ, số máy chủ bạn đã được gửi trong thư đăng ký có lẽ không phải là số máy chủ bạn nên sử dụng để kết nối với cơ sở dữ liệu từ xa. Bạn cần số máy chủ của máy mà trang web của bạn đang ngồi chứ không phải số máy chủ tài khoản ảo của bạn trên máy đó. Bạn có thể nhận được điều này từ hỗ trợ công nghệ của riêng bạn.
Tôi biết ơn Jonathan Jones tại Bluehost vì phân tích này.