Làm cách nào chúng tôi có thể kết nối với cơ sở dữ liệu MySQL từ tập lệnh php trong php?

Bây giờ bạn đã thấy một chút sức mạnh của cả PHP và MySQL, đã đến lúc kết hợp hai kẻ khổng lồ này lại với nhau. Với nhiều ngôn ngữ lập trình, bất cứ khi 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 mã bổ sung hoặc cài đặt các mô hình trình cắm nhỏ hỗ trợ chương trình của bạn để nói chuyện với cơ sở dữ liệu đó. Mặc dù vậy, PHP không giống như vậy;

Mặc dù bạn chỉ vừa mới bắt đầu hành trình để thành thạo PHP, nhưng bạn đã sẵn sàng sử dụng cơ sở dữ liệu từ tập lệnh của mình. Bạn chỉ cần học một vài lệnh mới và cách xử lý các sự cố có thể xảy ra khi bạn làm việc với cơ sở dữ liệu. Trên thực tế, bạn sẽ xây dựng một biểu mẫu đơn giản cho phép bạn nhập SQL và chạy nó trên cơ sở dữ liệu MySQL của bạn. Khi bạn là một lập trình viên PHP, bạn có thể vượt ra ngoài công cụ dòng lệnh mysql

Sau đó, để đặt một quả anh đào lên trên chiếc bánh su cao chót vót của bạn về sự tốt đẹp của PHP và MySQL, bạn sẽ viết một kịch bản khác. Tập lệnh này sẽ lấy tất cả thông tin từ các biểu mẫu bạn đã tạo, thêm thông tin đó vào cơ sở dữ liệu, sau đó thêm một biểu mẫu khác để cho phép người dùng của bạn tìm kiếm người dùng khác theo tên. Tất cả điều đó trong một chương?

Viết một tập lệnh kết nối PHP đơn giản

Bất kể tập lệnh PHP của bạn đơn giản hay nâng cao như thế nào, nếu chúng giao tiếp với cơ sở dữ liệu, chúng sẽ bắt đầu với cùng một số bước

  1. Kết nối với bản cài đặt MySQL

  2. SỬ DỤNG đúng cơ sở dữ liệu MySQL

  3. Gửi SQL đến cơ sở dữ liệu

  4. Lấy lại kết quả

  5. Làm điều gì đó với kết quả

Các bước 3, 4 và 5 sẽ thay đổi tùy theo việc bạn đang làm. Tập lệnh tạo 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 đúng cơ sở dữ liệu—luôn giống nhau, cho dù tập lệnh của bạn có cầu kỳ đến đâu. Cứ nghĩ đi rồi. mã bạn sắp viết giống mã 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ọ chỉ đang viết đoạn mã đó trong những ngôi nhà sang trọng hơn với những con rô-bốt phục vụ trà đá cho họ khi họ nằm dài bên hồ bơi. )

Kết nối với cơ sở dữ liệu MySQL

Trước tiên, bạn phải nói cho 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 là yêu cầu PHP thực hiện những gì bạn đã làm khi khởi động ứng dụng khách dòng lệnh MySQL của mình (). Khi bạn kết nối với cơ sở dữ liệu của máy chủ web, có thể bạn đã sử dụng một lệnh như sau

bmclaugh@akila:~$ mysql --host=dc2-mysql-02.kattare.com
                        --user=bmclaugh --password

Bạn cần những mẩu 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

Khởi động trình soạn thảo văn bản của bạn và tạo một tập lệnh mớ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 mình, SỬ DỤNG đúng cơ sở dữ liệu, sau đó chạy một truy vấn SQL mẫu để đảm bảo mọi thứ đang hoạt động bình thường

Trong tập lệnh của bạn, nhập các dòng sau

Error connecting to database: " .
           mysql_error() . "");

  echo "

Connected to MySQL!

"; ?>

Ghi chú

Nếu bạn đang chạy cơ sở dữ liệu của mình trên cùng một máy với PHP và các tệp phục vụ web, thì 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 cục bộ. ”

Nó thực sự đơn giản. Và giống như hầu hết các tập lệnh PHP khác mà bạn đã viết, mặc dù có một số lệnh mới, nhưng có lẽ bạn đã biết gần như chính xác những gì đang diễn ra ở đây

Đầu tiên, có một lệnh mới. mysql_connect. Lệnh này chỉ cần lấy máy chủ cơ sở dữ liệu, tên người dùng và mật khẩu và kết nối. Chính xác như thể bạn đang chạy công cụ mysql của mình 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ơ sở dữ liệu. máy chủ lưu trữ, tên người dùng của bạn và mật khẩu của bạn thành các giá trị cho cơ sở dữ liệu của riêng bạn

Nhưng những gì về bit chết? . Trên thực tế, nó là một chút khó chịu. bạn sử dụng die khi có gì đó không ổn trong kịch bản của bạn. Hãy coi die là câu 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à ném mã lỗi cho người dùng của tôi. Trong trường hợp này, khuôn in thông báo lỗi sẽ không khiến người dùng của bạn sợ hãi

Nhưng trước khi bạn có thể hiểu die, 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ó sẽ tạo hoặc sử dụng lại kết nối hiện có tớ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 mà bạn sẽ sớm tìm hiểu. Nhưng nếu mysql_connect không thể tạo kết nối đó—ví dụ: nếu cơ sở dữ liệu của bạn không chạy hoặc bạn có máy chủ hoặc tên người dùng không hợp lệ—mysql_connect trả về một giá trị rất khác. SAI

Vì vậy, những gì thực sự xảy ra trong kịch bản của bạn là như thế này

But that's a lot of typing, so PHP lets you shorten it to the following:
Error connecting to database: " .
           mysql_error() . "");

  echo "

Connected to MySQL!

"; ?>

Kịch bản này không chỉ ngắn hơn mà còn thay đổi mọi thứ một chút. Về cơ bản, nó nói rằng, hãy thử kết nối (sử dụng mysql_connect) và nếu kết quả không đúng (hoặc một phần của mã), thì 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 kịch bản của bạn. Vì vậy, nếu mysql_connect trả về false và chết, tập lệnh của bạn sẽ thoát. Người dùng của bạn sẽ không bao giờ thấy thông báo “Đã kết nối với MySQL. ” dòng vì tập lệnh sẽ ngừng chạy. Nó đã chết trên sàn phòng máy chủ, để tìm kiếm kết nối cơ sở dữ liệu đang hoạt động. (Xem hộp trên để biết thêm chi tiết về lệnh die. )

Không chỉ vậy, mysql_connect còn thiết lập chức năng khác khi không kết nối được. 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 như một phần của câu lệnh chết để hiển thị điều gì đã thực sự xảy ra

Ghi chú

Technically, mysql_connect, mysql_error, and die are all examples of functions. A function is a block of code, usually with a name assigned to it, which you can call from your own code anytime you need that block. It’s a lot quicker and better to call a function by name than to rewrite the block of code that function represents over and over again

Don’t worry about functions for now, though. Just use them like any old PHP command. Before long, not only will you understand functions better, but you’ll be writing your own

If mysql_connect connects without any problems, it returns that connection. PHP will skip the die line, and then execute this line

echo "

Connected to MySQL!

";

To see this command in action, create a simple HTML form, and call it connect. html. You can use this HTML to get you going

 
  
 

 
  
  

Example 4-1

SQL Connection test

This script is about as simple as it gets. it builds a form, drops a single button into place, and attaches that button to your new connect. php script. Load up your form in a browser (see ), and click “Connect to MySQL. ”

Hopefully, you see one of the simplest, happiest messages of your burgeoning PHP and MySQL programming career. you’re connected. Check out for the sweet sight of success

Làm cách nào chúng tôi có thể kết nối với cơ sở dữ liệu MySQL từ tập lệnh php trong php?

Figure 4-1.  Sure, you could have made connect. html even simpler. You could have ditched all the structure and CSS referencing. But who wants to connect to a database without showing off a little? Besides, customers like a nice, clean site. You don’t have to spend hours on CSS, but make even your most basic demos look professional, and your clients will love you for it

Làm cách nào chúng tôi có thể kết nối với cơ sở dữ liệu MySQL từ tập lệnh php trong php?

Figure 4-2.  These three words mean that your PHP script now can do virtually anything you can imagine with your database. Nhưng có điều gì đó còn thiếu. Làm cách nào để MySQL biết cơ sở dữ liệu nào là của bạn?

Lựa chọn Cơ sở dữ liệu để SỬ DỤNG

Có một cái gì đó tuyệt vời đang chờ đợi xung quanh góc lập trình. hầu như tất cả các hàm mysql_ đều hoạt động giống nhau. bạn cung cấp cho họ một số giá trị và họ sẽ trả lại thứ gì đó hữu ích. Nếu điều gì đó tồi tệ xảy ra, bạn thường nhận lại đối tượng sai hoặc đố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 là null hoặc nil)

Vì vậy, bây giờ bạn cần nói cho MySQL biết tập lệnh PHP của bạn muốn sử dụng cơ sở dữ liệu nào. Có một chức năng cho điều đó. mysql_select_db

Ghi chú

Có một họ hàm mysql_ mở rộng. Bạn có thể muốn đánh dấu trang tài liệu của họ. www. php. net/manual/en/ref. mysql. php. Nếu bạn gặp khó khăn, hãy đến đó và xem liệu một chức năng có thể làm những gì bạn cần không

Bạn đặt tên cơ sở dữ liệu mysql_select_db và—bạn đoán nó—nó SỬ DỤNG cơ sở dữ liệu đó hoặc trả về false. Vì vậy, cập nhật kết nối. php để SỬ DỤNG đúng cơ sở dữ liệu

Error connecting to database: " .
           mysql_error() . "");

  echo "

Connected to MySQL!

"; mysql_select_db("your-database-name") or die("

Error selecting the database bmclaugh: " . mysql_error() . "

"); echo "

Connected to MySQL, using database bmclaugh.

";
?>

Bạn đã thấy mô hình. die đảm bảo rằng nếu điều tồi tệ xảy ra, tập lệnh của bạn sẽ báo lỗi, người dùng của bạn sẽ đọc lỗi đó và sau đó tập lệnh sẽ thoát. Nếu mọi việc suôn sẻ, một thông điệp vui vẻ khác sẽ được in ra

Hãy thử phiên bản mới này. Truy cập kết nối. html một lần nữa và thử kết nối (và bây giờ là SỬ DỤNG) cơ sở dữ liệu của bạn. Bạn muốn xem một cái gì đó như. Tiếp theo. nói chuyện SQL với cơ sở dữ liệu của bạn

Làm cách nào chúng tôi có thể kết nối với cơ sở dữ liệu MySQL từ tập lệnh php trong php?

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 ở 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 đúng cơ sở dữ liệu

HIỂN THỊ các bảng trong cơ sở dữ liệu của bạn

Bây giờ bạn đã có kết nối và bạn được kết nối với đúng cơ sở dữ liệu, bạn sẽ thấy chính xác 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 bảng nào đã tồn tại, sau đó bắt đầu tạo các bảng của riêng bạn. Còn một số việc phải làm trong việc tạo bảng và bạn sẽ thực hiện việc đó sau một chút nữa, 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 vấn đề đó, bạn có thể dễ dàng để tập lệnh của mình xem bảng nào có sẵn trong cơ sở dữ liệu của bạn. Mở kết nối. php lại và thêm dòng sau

  $result = mysql_query("SHOW TABLES;");
?>

Đây là một hàm PHP-to-MySQL mới khác. mysql_query. Bạn sẽ trở nên rất, rất quen thuộc với cái này; . Hàm này sử dụng SQL và bạn đã cung cấp cho nó một số SQL thực sự đơn giản

SHOW TABLES;

Lệnh này giống hệt 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 nếu kết quả của bạn không

Nhưng chết thì sao? . Nhưng có điều 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à $result

Vì vậy, đó thực sự là kết quả $ mà bạn muốn kiểm tra. Nó phải có một danh sách các bảng, từ SHOW TABLES hoặc nó đang báo cáo một lỗi nào đó. Và nếu nó báo lỗi thì $result là false, vì hàm mysql_ trả về false khi có 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ý sự cố

________số 8_______

Bây giờ, điều này hoạt động, nhưng nó 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. === là một điều khá bất thường khi sử dụng trong PHP, ít nhất là để kiểm tra xem một biến có sai không. Điều phổ biến hơn—và cách nó 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ó tên $some-variable có sai hay không, bạn có thể nói if (. $một số biến). Và đó. nói điều gì đó như, “hãy xem liệu $some-variable có sai không. ”

Thậm chí tốt hơn, hãy nghĩ về. như là “không. ” Vì vậy, điều bạn thực sự muốn nói trong mã của mình là, “Nếu không phải $result, thì hãy chết. ” Theo đó, bạn có thể viết lại mã của mình trông như thế này

SHOW TABLES;");

  if (!$result) {
    die("

Error in listing tables: " . mysql_error() . "

"); } ?>

Loại mã này tốt hơn nhiều so với PHP và bây giờ bạn đã có bất kỳ vấn đề nào được đề cập

Ghi chú

Có vẻ lạ khi nghe về “cách nó được thực hiện trong PHP. ” Nếu mã hoạt động, thì nó hoạt động, phải không? . Hãy thử và giải thích tại sao nhiều hơn một con cừu vẫn chỉ là “cừu” và bạn đã hiểu

Ngôn ngữ lập trình giống nhau. Có mã viết hoạt động và có mã viết 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 để “nói đúng cách” trong JavaScript và Ruby được gọi là Eloquent JavaScript (Marijn Haverbeke; No Starch Press) và Eloquent Ruby (Russ Olsen; Addison Wesley). Nó đáng để học không chỉ cách viết PHP hoạt động mà còn cách viết PHP trông tự nhiên

Trên thực tế, chỉ để đảm bảo mã của bạn xử lý lỗi, hãy thay đổi truy vấn SQL của bạn thành lỗi chính tả

Error connecting to database: " .
           mysql_error() . "");

  echo "

Connected to MySQL!

"; ?>
0

Bây giờ tải lên kết nối. html trong trình duyệt và chạy kiểm tra kết nối của bạn. tương tự như những gì bạn sẽ thấy. vẫn hơi khó hiểu, nhưng rõ ràng đây là trường hợp mã của bạn nhận ra có vấn đề và xử lý nó bằng một thông báo lỗi chứ không phải là một cuộc khủng hoảng lớn

Làm cách nào chúng tôi có thể kết nối với cơ sở dữ liệu MySQL từ tập lệnh php trong php?

Hình 4-4. Xử lý lỗi mỗi bước trên đường đi. Bạn xử lý lỗi càng tốt và thông báo của bạn càng cụ thể thì bạn càng dễ dàng tìm ra lỗi sai trong mã của mình. Đ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 khắc phục khi có lỗi

In kết quả SQL của bạn

Lỗi được xử lý, sự cố được báo cáo và giờ đây, cuối cùng bạn có thể xử lý những gì thực sự xảy ra trong $result khi mọi thứ không gặp trục trặc. Thật không may, mọi thứ trở nên phức tạp hơn một chút ở đây. $result thực ra không phải là một kiểu PHP mà bạn đã sử dụng, hoặc thậm chí là một kiểu mà bạn sẽ cần học cách làm việc trực tiếp. Đó là một thứ được gọi là tài nguyên, là cách nói của PHP cho một biến đặc biệt có liên quan đến thứ gì đó bên ngoài PHP

Hãy suy nghĩ về nó như thế này. Trong trường hợp của mysql_query, bạn đã yêu cầu kết quả SQL từ việc chạy truy vấn SHOW TABLES. Nhưng trong khi PHP có thể nói chuyện với MySQL, thì nó thực sự không biết cách diễn giải SQL. Vì vậy, nó không thể biết rằng $result sẽ chứa một danh sách các hàng, mỗi hàng có một giá trị. tên bảng. Tất cả những gì nó biết là một thứ khác—cơ sở dữ liệu MySQL của bạn—đang nhận một truy vấn thông qua hàm mysql_query. Và nghĩ về nó. tùy thuộc vào truy vấn bạn vượt qua mysql_query, $result có thể chứa các hàng có nhiều mẩu thông tin, chẳng hạn như tên và URL Facebook hoặc chỉ là dấu hiệu cho biết câu lệnh CREATE TABLE có hoạt động 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 gì đó; . Vì vậy, PHP của bạn cần trợ giúp. Cái nó cần là thứ gì đó biết về MySQL và có thể tìm ra cách làm việc với $result. Đó chính xác là những gì bạn nhận được với một hàm MySQL khác, mysql_fetch_row. Bạn chuyển hàm này vào tài nguyên được trả về từ mysql_query và hàm này cho phép bạn duyệt qua từng hàng trong kết quả được trả về từ truy vấn SQL của bạn

Đây là mẫu cơ bản

  1. Viết truy vấn SQL của bạn và lưu nó trong một chuỗi hoặc một biến

  2. Chuyển truy vấn của bạn vào mysql_query và lấy lại tài nguyên PHP

  3. 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

  4. Xoay vòng qua các hàng đó và lấy ra thông tin bạn cần

  5. Mua một cây đàn thật đẹp bằng tất cả số tiền bạn kiếm được

Ghi chú

Bước cuối cùng đó là tùy chọn, nhưng rất khuyến khích

Bạn đã có một tài nguyên trong $result, vì vậy bây giờ hãy chuyển nó vào mysql_fetch_row, như thế này

Error connecting to database: " .
           mysql_error() . "");

  echo "

Connected to MySQL!

"; ?>
1

Mặc dù PHP không biết phải làm gì với tài nguyên được trả về từ mysql_query, nhưng mysql_fetch_row lại biết. Nó lấy tài nguyên kết quả $ của bạn và bắt đầu tạo ra các hàng, từng hàng một, trong một mảng

Và sau đó là vòng lặp while, cũng mới, nhưng có lẽ đã có ý nghĩa với bạn rồi. Vòng lặp while tiếp tục lặp chừng nào điều gì đó còn đúng. Trong trường hợp này, vòng lặp tiếp tục lặp trong khi $row—là hàng kết quả tiếp theo từ truy vấn SQL của bạn—đang nhận giá trị từ mysql_fetch_row($result). Khi không còn hàng kết quả nào nữa, mysql_fetch_row không trả về bất kỳ thứ gì, vì vậy $row trống và vòng lặp while thông báo: “Ok, I’m done. Tôi sẽ ngừng lặp lại ngay bây giờ. ”

Và, bạn đã có một danh sách không có thứ tự đẹp mắt (ul) sẵn sàng để nhổ ra từng hàng, vì vậy chỉ còn một thứ để thêm vào

Error connecting to database: " .
           mysql_error() . "");

  echo "

Connected to MySQL!

"; ?>
2

Mã này sẽ bắt đầu trông quen thuộc trở lại. Mỗi lần mysql_fetch_row trả về $row, nó thực sự trả về một mảng, thứ mà bạn đã thấy trước đây (). Mảng đó có tất cả các phần thông tin khác nhau từ truy vấn SQL của bạn. Đối với SHOW TABLES, đó chỉ là một thứ, tại $row[0]. tên bảng. Chẳng bao lâu nữa, bạn sẽ viết một số truy vấn phức tạp hơn và bạn có thể cần lấy giá trị trong $row[1] hoặc $row[2] hoặc thậm chí $row [10]

Vì vậy, trong trường hợp này, bạn quay lại $row, bạn lấy tên bảng bằng cách lấy mục đầu tiên trong mảng, tại chỉ mục 0, sau đó bạn in mục đó bằng tiếng vang. Chỉ có một nếp nhăn khác ở đây. các dấu ngoặc nhọn bên trong chuỗi được chuyển đến echo. Có chuyện gì với những thứ đó vậy?

Vâng, bạn có thể viết lại dòng này như thế này

Error connecting to database: " .
           mysql_error() . "");

  echo "

Connected to MySQL!

"; ?>
3

Không có gì sai ở đó, ngoại trừ tất cả các dấu ngoặc kép và dấu chấm bổ sung để gắn các chuỗi lại với nhau

Ghi chú

Điểm mọt sách chính nếu bạn nhớ rằng trộn các chuỗi với nhau được gọi là nối ()

Nhưng PHP khá hiểu biết và những người viết ra ngôn ngữ này cũng là những 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 các 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ần bọc một biến bên trong { } 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à đó là một điều tốt

Lư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 có những bảng nào trong cơ sở dữ liệu của mình. đang kết nối. php chạy trên cơ sở dữ liệu có nhiều bảng. Bạn có thể chỉ có một hoặc hai, và điều đó tốt. Chỉ cần chắc chắn rằng bạn nhìn thấy một danh sách các bảng của bạn

Làm cách nào chúng tôi có thể kết nối với cơ sở dữ liệu MySQL từ tập lệnh php trong php?

Hình 4-5. SHOW TABLES hóa ra 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 có thể bạn đang 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. Tuy nhiên, hiện tại, đó là một cách thực sự dễ dàng để đảm bảo rằng 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

Dọn dẹp mã của bạn bằng nhiều tệp

Ngay cả khi bạn chưa nhận ra điều đó, thì vẫn có vấn đề về kết nối của bạn. tập lệnh php. Nhìn vào một vài cuộc gọi MySQL đầu tiên bạn thực hiện

Error connecting to database: " .
           mysql_error() . "");

  echo "

Connected to MySQL!

"; ?>
4

Bạn đang nhập thủ công máy chủ cơ sở dữ liệu, tên người dùng, mật khẩu và tên cơ sở dữ liệu của mình vào tập lệnh của mình. Bây giờ, giả sử bạn có 10 tập lệnh và bạn đang gõ 10 lần. Cơ hội của một lỗi đánh máy là khá cao

Không chỉ vậy, điều gì xảy ra khi bạn thay đổi mật khẩu? . Đó là một cơn ác mộng và khiến bạn không thực sự viết mã mới và kiếm thêm tiền. Không tốt

Bạn cần một cách để trừu tượng hóa những mẩu thông tin đó. Trừu tượng hóa 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 hoạt động của một thứ gì đó (như mật khẩu), khỏi 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 thứ khác với nhiều chi tiết hơn. Và ngay cả khi chi tiết đó thay đổi, cái tên vẫn chỉ đúng thứ

Nó giống 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à cái hay của “Leigh” là vào mỗi dịp sinh nhật, bạn có thể tiếp tục nói “Leigh” thay vì thay đổi mô tả của mình

Thay thế các giá trị được nhập bằng tay bằng các biến

Vì vậy, giả sử bạn muốn mã của mình trông giống thế này hơn (thực ra, bạn thực sự muốn nó trông giống thế này hơn)

Error connecting to database: " .
           mysql_error() . "");

  echo "

Connected to MySQL!

"; ?>
5

Tất cả những gì bạn đang làm là viết thứ gì đó trông hơi giống một biến thay cho việc nhập tên người dùng hoặc tên cơ sở dữ liệu bằng tay. Giờ đây, bạn có thể xác định các biến đó phía trên mã kết nối của mình

Error connecting to database: " .
           mysql_error() . "");

  echo "

Connected to MySQL!

"; ?>
6

Nhưng điều này có thực sự tốt hơn nhiều không? . Bạn muốn dán các giá trị vào một tệp để không ai phải nhập chúng. đọc tiếp

Tóm tắt các giá trị quan trọng vào 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ó là 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à lưu app_config. php ở đâu đó hợp lý để tất cả các tập lệnh của ứng dụng của bạn truy cập vào nó. Trong ví dụ của cuốn sách này, app_config. php nằm trong thư mục gốc của trang web, bên dưới scripts/. Vì vậy, nếu bạn đang ở trong thư mục ch04/scripts/, bạn sẽ 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ứ đâu bạn muốn, miễn là bạn có đường dẫn ngay trong tập lệnh PHP tham chiếu tệp đó

Khi bạn chuyển sang phiên bản sản xuất của ứng dụng, có thể bạn muốn đặt tệp này bên ngoài thư mục gốc của trang. Bằng cách đó, người dùng web không thể chỉ cần nhập đường dẫn đến tập lệnh cấu hình của bạn và lấy 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ỉ cần đưa nó ra khỏi các thư mục cung cấp web hoàn toàn thường là cách dễ nhất

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à thay đổi đó ảnh hưởng đến tất cả các tập lệnh PHP 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? . php và xóa nơi bạn đã tự xác định các biến này. Nếu bạn thử và truy cập kết nối. php thông qua kết nối. html bây giờ, tuy nhiên, bạn sẽ gặp một lỗi khó chịu, như được hiển thị trong phần xem

Làm cách nào chúng tôi có thể kết nối với cơ sở dữ liệu MySQL từ tập lệnh php trong php?

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 biết điều này. Bạn cần thông báo cho tập lệnh kết nối của mình rằng tập lệnh này sẽ không 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 do kết nối. php bây giờ không biết $username hoặc $password đề cập đến cái gì. 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, bắt buộc phải tải app_config. php. Và đó (gần như) chính xác những gì bạn nhập vào kịch bản của mình

Error connecting to database: " .
           mysql_error() . "");

  echo "

Connected to MySQL!

"; ?>
7

Bây giờ, PHP tải tệp. /. /scripts/app_config. php trước khi nó chạy chức năng mysql_connect của bạn. Trên thực tế, yêu cầu nói, “Này PHP, nếu bạn không thể tải tệp tôi đang cung cấp, thì hãy đưa ra 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 rằng đường dẫn và tên tệp bạn cung cấp yêu cầu khớp với nơi bạn thực sự đặt app_config. php, nếu không bạn sẽ thấy lỗi yêu cầu sản xuất cận cảnh 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 trở lại

Các biến thay đổi, nhưng các hằng số không đổi

Chỉ còn một vấn đề nhỏ khó chịu nữa với mã của bạn. bạn vẫn đang sử dụng các biến cho tên người dùng và mật khẩu của mình, cùng với máy chủ cơ sở dữ liệu và tên cơ sở dữ liệu. Và một biến là gì? . Theo đó, PHP vui vẻ cho phép bạn viết đoạn mã sau trong kết nối. php

Error connecting to database: " .
           mysql_error() . "");

  echo "

Connected to MySQL!

"; ?>
8

Vậy điều gì sẽ xảy ra khi một số tập lệnh khác—cũng yêu cầu app_config. php—cố gắng kết nối với mysql_connect? . Nó được đặt thành "hijinks" và sự hỗn loạn sẽ xảy ra

Điều bạn thực sự muốn là dành 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 chức năng xác định đặc biệt. Mở app_config. php và thay đổi mã của bạn

Error connecting to database: " .
           mysql_error() . "");

  echo "

Connected to MySQL!

"; ?>
9

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 một hằng số mới. Bằng cách đó, bạn có thể nhập DATABASE_HOST vào mã của mình và PHP thực sự thấy “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ên nó không thể thay đổi ở bất cứ đâu dọc theo dòng

Các hằng số được gõ bằng chữ in hoa. Chữ viết hoa không bắt buộc, nhưng đó là một trong những thứ “nói như một lập trình viên PHP”. Bạn muốn các hằng trông khác với các biến và sử dụng tất cả các tên viết hoa là một cách để làm điều đó. Các hằng số cũng không có $ trước tên của chúng, đây là một cách khác để phân biệt một hằng số với một biến

Bây giờ bạn cần thực hiện một số thay đổi nhanh để kết nối. php để sử dụng các tên hằng mới được viết hoa này

But that's a lot of typing, so PHP lets you shorten it to the following:
Error connecting to database: " .
           mysql_error() . "");

  echo "

Connected to MySQL!

"; ?>
0

Cảnh báo

Bạn không thể sử dụng { } bên trong dấu ngoặc kép của mình để in hằng số. Chỉ khi bạn bao quanh một biến (bắt đầu bằng $) với { } thì PHP mới in giá trị của biến đó. Thay vào đó, hãy sử dụng phương pháp nối chuỗi bình thường khi bạn kết thúc chuỗi của mình và thêm các hằng số bằng cách sử dụng dấu chấm (. ), như đã thảo luận trên

thử kết nối. php lại. Bạn sẽ nhận được một danh sách tên bảng hoàn toàn tốt. Nhưng lần này, bạn đã có các hằng số cho thông tin quan trọng của mình, được cất giữ an toàn trong một tệp được tách ra khỏi kết nối. php

Ghi chú

Bạn cũng nên 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 đó mà 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 không thể truy cập. Yêu cầu quản trị viên web hoặc máy chủ của bạn trợ giúp nếu bạn không chắc chắn cách thực hiện

Xây dựng Trình chạy truy vấn SQL cơ bản

Bây giờ bạn có thể kết nối với SQL, bạn đã sẵn sàng tiếp nhận điều gì đó 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ây giờ bạn là một nhà phát triển và lập trình viên PHP, vì vậy hãy gạch bỏ “dòng lệnh” và thay thế nó bằng “dựa trên web”. ”

Hóa ra là 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 của bạn nhập 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 cũng như bạn có thể chạy truy vấn. Tất cả những gì còn lại là tìm ra cách diễn giải tài nguyên PHP mà mysql_query trả về khi nó không phải là danh sách tên bảng

Tạo một biểu mẫu HTML với một hộp trống lớn

Tuy nhiên, trước khi truy cập mysql_query và kết quả của nó, hãy bắt đầu với những gì bạn biết. một biểu mẫu 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 soạn thảo văn bản của bạn và tạo queryRunner. html

But that's a lot of typing, so PHP lets you shorten it to the following:
Error connecting to database: " .
           mysql_error() . "");

  echo "

Connected to MySQL!

"; ?>
1

Kích hoạt trình duyệt yêu thích của bạn và đảm bảo mọi thứ trông giống như

Làm cách nào chúng tôi có thể kết nối với cơ sở dữ liệu MySQL từ tập lệnh php trong php?

Hình 4-7. Ai đã từng nói rằng bạn sẽ không 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?

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 những gì 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. Bây giờ mã này khá quen thuộc; . php và đi làm

But that's a lot of typing, so PHP lets you shorten it to the following:
Error connecting to database: " .
           mysql_error() . "");

  echo "

Connected to MySQL!

"; ?>
2

Nhưng chờ đã… cái này quen rồi. Bạn đã viết mã này trước đó, quay lại và trên thực tế, bạn phải viết mã này mỗi khi kết nối với MySQL. Kiểu sao chép đó không tốt. Đó là lý do 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 duy nhất, thay vì mười hoặc một trăm nơi

Bạn đã thấy việc yêu cầu tệp () và lấy một số giá trị không đổi dễ dàng như thế nào. 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ó là database_connection. php. Lưu tập lệnh mới này ngay bên cạnh app_config. php và gõ đoạn mã sau

But that's a lot of typing, so PHP lets you shorten it to the following:
Error connecting to database: " .
           mysql_error() . "");

  echo "

Connected to MySQL!

"; ?>
3

Ghi chú

Đảm bảo đường dẫn của bạn đến app_config. php khớp với nơi bạn lưu trữ tệp đó. Nếu bạn đang lưu data-base_connection. php trong cùng thư mục với app_config. php, bạn chỉ cần tên tệp, không cần bất kỳ đường dẫn thư mục nào

Bây giờ bạn đã có tất cả mã cơ sở dữ liệu của mình được cất gọn gàng, điều đó có nghĩa là bạn có thể đại tu triệt để run_query. php

Làm thế nào mà mã ngắn? . php. Tập lệnh của bạn yêu cầu cơ sở dữ liệu_connection. php, và đó là data-base_connection. php xử lý việc đưa vào app_config. php. Mã của bạn bây giờ đẹp hơn và gọn gàng hơn

Để đảm bảo điều này hoạt động, bạn nên truy cập queryRunner của mình. trang html và nhấp vào Chạy truy vấn. Bạn sẽ nhận được một cái gì đó giống như —tất cả không có gì ngoài một yêu cầu duy nhất trong tập lệnh chính của bạn

Làm cách nào chúng tôi có thể kết nối với cơ sở dữ liệu MySQL từ tập lệnh php trong php?

Hình 4-8. Có vẻ lạ khi viết một kịch bản (ít nhất là cho đến nay) không làm gì khác hơn là yêu cầu một kịch bản khác. Trên thực tế, bạn càng viết mã thoải mái bao nhiêu thì bạn càng thích kiểu tái sử dụng này bấy nhiêu. Bạn muốn viết mã mới vừa đủ để hoàn thành công việc. Nếu bạn có thể sử dụng lại 100 hoặc 1.000 dòng mã hiện có, thì bạn nên

Chạy truy vấn SQL của người dùng của bạ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ứ thứ gì người dùng đưa vào vùng văn bản lớn trên biểu mẫu của bạn thông qua biến $REQUEST, như bạn nhớ là một mảng (). Và bạn cũng có thể sử dụng mysql_query để chạy truy vấn

Bạn chỉ cần đặt hai thứ đó lại với nhau

But that's a lot of typing, so PHP lets you shorten it to the following:
Error connecting to database: " .
           mysql_error() . "");

  echo "

Connected to MySQL!

"; ?>
4

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ó tới mysql_query và bạn đã sẵn sàng. Sau đó, bạn có thể chuyển tài nguyên PHP được trả về, $result, tới câu lệnh if xử lý lỗi và cuối cùng là mysql_fetch_row để in ra kết quả từ truy vấn

Kịch bản có vẻ khá tốt, vì vậy bây giờ bạn đã 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 có nhiều dữ liệu trong cơ sở dữ liệu của mình vào 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 là url. Đây là SQL bạn sẽ cần

But that's a lot of typing, so PHP lets you shorten it to the following:
Error connecting to database: " .
           mysql_error() . "");

  echo "

Connected to MySQL!

"; ?>
5

Tất nhiên, vì bạn đã có một vùng văn bản lớn đẹp mắt, bạn cũng có thể trải rộng nó ra

But that's a lot of typing, so PHP lets you shorten it to the following:
Error connecting to database: " .
           mysql_error() . "");

  echo "

Connected to MySQL!

"; ?>
6

Dù bằng cách nào, bạn muốn có một biểu mẫu trông giống như

Làm cách nào chúng tôi có thể kết nối với cơ sở dữ liệu MySQL từ tập lệnh php trong php?

Hình 4-9. Sử dụng vùng văn bản ở đây cho phép người dùng của bạn nhập SQL theo cách họ muốn. Đó là một điều nhỏ, nhưng một chút linh hoạt và thiết kế lấy người dùng làm trung tâm này làm cho các biểu mẫu web của bạn trở nên thú vị hơn rất nhiều khi sử dụng. Bạn sẽ không muốn viết một câu lệnh SQL dài dằng dặc trong một hộp nhập liệu khổng lồ trên một dòng, vậy tại sao người dùng của bạn lại như vậy?

Bây giờ hãy nhấp vào Chạy truy vấn. Bạn đã nhận được gì?

Làm cách nào chúng tôi có thể kết nối với cơ sở dữ liệu MySQL từ tập lệnh php trong php?

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 điều gì đã xảy ra với tập lệnh của mình. Trong những trường hợp như thế này, một thông báo lỗi sẽ hữu ích, không gây ra sự thất vọng

Chà, chuyện gì đã xảy ra vậy? . Bạn sẽ thấy một thông báo giống như thông báo được hiển thị trong

Làm cách nào chúng tôi có thể kết nối với cơ sở dữ liệu MySQL từ tập lệnh php trong php?

Hình 4-11. Đầu tiên, bạn không có gì, và bây giờ là một lỗi. Điều gì đang xảy ra?

Lần đầu tiên bạn chạy truy vấn CREATE TABLE trên , bạn không nhận được gì cả—không có kết quả nào cả. Lần sau, MySQL sẽ cho bạn biết bảng url đã tồn tại. Trên thực tế, nếu bạn chuyển đến công cụ dòng lệnh của mình, bạn sẽ thấy rằng, vâng, bảng đó tồn tại trong cơ sở dữ liệu của bạn

But that's a lot of typing, so PHP lets you shorten it to the following:
Error connecting to database: " .
           mysql_error() . "");

  echo "

Connected to MySQL!

"; ?>
7

Xem kỹ mã của bạn một lần nữa

But that's a lot of typing, so PHP lets you shorten it to the following:
Error connecting to database: " .
           mysql_error() . "");

  echo "

Connected to MySQL!

"; ?>
8

Nếu (. $result) khối mã không chạy, vì vậy rõ ràng $result đã trở lại dưới dạng một cái gì đó không phải là sai. Nhưng vòng lặp while không bao giờ chạy;

Nhưng đợi một chút. Truy vấn của bạn là truy vấn TẠO. Những hàng nào sẽ được trả về từ loại truy vấn đó? . Bạn vừa yêu cầu MySQL tạo một bảng;

Xử lý truy vấn không CHỌN thông tin

Bí mật ở đây là mysql_query rất vui khi nhận được câu lệnh CREATE. Nó thậm chí còn làm những gì bạn yêu cầu, đó là lý do tại sao lần thứ hai bạn nhập truy vấn đó, MySQL đã báo lỗi cho bạn, nói rằng bảng url đã được tạo. Khi mysql_query nhận được câu lệnh CREATE, nó trả về false nếu có lỗi—mà tập lệnh của bạn xử lý—nhưng trả về true nếu không có lỗi. Và nếu không có lỗi, nó sẽ không trả về bất kỳ hàng nào. Bạn nhận được một giá trị thực trong $result, nhưng không có gì khác. Và đó là nơi mọi thứ đã đi sai

Khi mysql_query nhận hầu hết các câu lệnh SQL không chọn dữ liệu, như CREATE, INSERT, UPDATE, DELETE, DROP và một vài câu lệnh khác, nó chỉ trả về true (nếu mọi thứ hoạt động) hoặc false (nếu chúng không hoạt động)

Ghi chú

Một vài trong số các lệnh SQL đó, như CẬP NHẬT và XÓA, có thể trông mới đối với bạn. Đừng lo lắng, mặc dù. Họ chỉ làm những gì họ trông giống như họ làm. UPDATE cập nhật thông tin trong một bảng và DELETE xóa 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 chức năng đó.

May mắn thay, bây giờ bạn đã biết chuyện gì đang xảy ra nên 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 hay không. Nếu vậy, bạn phải xử lý nó theo cách khác. Và đúng như vậy, bạn rất thoải mái với việc tìm kiếm thông qua các chuỗi

Vì vậy, hãy suy nghĩ kỹ điều này;

  1. Lấy truy vấn của người dùng từ biểu mẫu HTML

  2. Chuyển truy vấn vào mysql_query và lưu kết quả vào một biến

  3. Xác định xem kết quả có sai hay không, điều này không tốt cho dù loại SQL nào được truyền vào

  4. 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ẢO. (Có những cái khác, nhưng đây là những cái phổ biến nhất để kiểm tra. )

  5. 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 việc diễn ra tốt đẹp

  6. 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 (hoặc có thể là một vài nếu, thực tế) và một số tìm kiếm

But that's a lot of typing, so PHP lets you shorten it to the following:
Error connecting to database: " .
           mysql_error() . "");

  echo "

Connected to MySQL!

"; ?>
9

Cảnh báo

Đảm bảo sử dụng dấu ba bằng đó (===) trong câu lệnh if của bạn để kiểm tra xem $location có sai không

Mã này có vẻ phức tạp, nhưng nó rất đơn giản nếu bạn xem qua từng dòng một. Về cơ bản, bạn có cùng một câu lệnh if, lặp đi lặp lại, với mỗi câu lệnh có một câu lệnh if lồng nhau khác

echo "

Connected to MySQL!

";
0

Cuối cùng, nếu tất cả các câu lệnh if không thành công, thì bạn không có CREATE, INSERT, UPDATE, DELETE hoặc DROP ở bất kỳ đâu trong chuỗi truy vấn

echo "

Connected to MySQL!

";
1

Nhưng tại sao điều này lại phức tạp như vậy? . Đó là 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 đừng quá gắn bó với nó. Nó thực sự xấu xí, và trong chương tiếp theo, bạn sẽ thêm một công cụ cực kỳ mới vào bộ công cụ lập trình PHP của mình và làm lại mã này để trở nên mỏng và đẹp hơn rất nhiều

Ở mỗi bước, nếu tìm thấy chuỗi tìm kiếm, người dùng đã nhập một trong những từ khóa SQL đặc biệt không trả về hàng, vì vậy biến $return_rows được đặt thành false, khác với giá trị ban đầu của nó, true

Cuối cùng, khi kết thúc lễ hội tình yêu bằng dấu ngoặc nhọn này, các câu lệnh if sẽ quay trở lại chương trình chính và $returns_rows có giá trị là true vì không tìm kiếm nào phù hợp hoặc sai vì một trong số chúng khớp

Bây giờ bạn đã sẵn sàng sử dụng $returns_rows để in kết quả

echo "

Connected to MySQL!

";
2

Ghi chú

Hãy nhớ rằng if ($return_rows) cũng giống như if ($return_rows === true). Điều tương tự cũng xảy ra với if ($result)

Hầu hết kịch bản này đều quen thuộc. Tất cả mã bạn đang sử dụng để in ra các hàng vẫn giữ nguyên. Mã đó chỉ di chuyển bên trong khối if ($return_rows), bởi vì nó chỉ áp dụng nếu người dùng nhập một cái gì đó giống như CHỌN trả về (có khả năng) rất nhiều kết quả

Sau đó, trong trường hợp khác nếu, tập lệnh của bạn chỉ báo cáo xem mọi thứ có ổn hay không. Là một trợ giúp bổ sung, phần này của if in ra truy vấn ban đầu để người dùng có thể biết điều gì đã được thực thi

Bây giờ, về mặt kỹ thuật, bạn không thực sự cần điều đó nếu ($result). Vì bạn đã kiểm tra trước đó để xem liệu kết quả $ có sai hay không, nếu tập lệnh của bạn đi đến điểm cuối cùng này, bạn biết rằng kết quả $ là đúng, vì vậy bạn có thể đơn giản hóa mọi thứ ở cuối một chút

echo "

Connected to MySQL!

";
3

Kịch bản này sẽ hơi dài, nhưng bạn biết mọi dòng đơn lẻ đang làm gì vào thời điểm này. Đi trước và thử nó ra

Có thể bạn đã tạo bảng url ()—mặc dù tập lệnh PHP của bạn không cho bạn biết điều đó. Vì vậy, hãy thử nhập các url DROP TABLE; . Sau đó chạy truy vấn của bạn và lần này, bạn sẽ nhận được một thông báo 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

Rất tiếc, vẫn còn sự cố ở một trong các dòng trong mã ở 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?

echo "

Connected to MySQL!

";
4

Tập hợp các câu lệnh if của bạn hiểu rằng DROP là một phần của truy vấn, nhận ra rằng nó không có hàng trả về và thực hiện đúng. báo cáo rằng truy vấn đã chạy mà không gặp sự cố hoặc đã xảy ra lỗi

Làm cách nào chúng tôi có thể kết nối với cơ sở dữ liệu MySQL từ tập lệnh php trong php?

Hình 4-12. Bây giờ run_query. php, như được hiển thị trên trang 119, tìm hiểu xem truy vấn có được chuyển qua một trong các từ khóa cho biết không có bất kỳ hàng nào trả về hay không. Thông báo khi mọi thứ diễn ra tốt đẹp vẫn còn hơi ngắn gọn, nhưng ít nhất không có khoảng trống nào để cố gắng hiển thị các hàng kết quả khi không có bất kỳ hàng kết quả nào để hiển thị

Nhưng những gì về truy vấn này?

echo "

Connected to MySQL!

";
5

Đây là tuyên bố sẽ chỉ ra một trận đấu

echo "

Connected to MySQL!

";
6

Nhưng dòng đó tìm DROP không khớp với "drop" chút nào. strpos tìm kiếm các chuỗi, nhưng nó thấy một chữ cái viết thường, như “d”, là một chữ cái khác với chữ cái viết hoa “D”. Vì vậy, tìm kiếm đó tìm thấy “DROP” chứ không phải “drop” hoặc “dRoP”

Và, như mọi khi, bạn có con người sử dụng ứng dụng của mình chứ không phải rô-bốt. Bạn không thể 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ữ in hoa, nhưng con người sẽ là con người và họ có xu hướng bỏ qua các hướng dẫn như thế này

Bạn sẽ dành ít nhất thời gian để xử lý yếu tố con người trong mã của mình bằng với việc viết mã xử lý cái gọi là quy trình 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 sẽ nhận ra rằng “bình thường” không phải là một khái niệm hữu ích lắm. Thay vào đó, mã của bạn chỉ cần xử lý nhiều khả năng như bạn có thể tưởng tượng (và một số khả năng bạn không thể)

Sửa lỗi 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 thành tất cả các chữ in hoa trước khi bắt đầu tìm kiếm thông qua nó

echo "

Connected to MySQL!

";
7

Bây giờ, nếu người dùng nhập url bảng thả hoặc bảng DROP UrLS, chuỗi tìm kiếm là URL DROP TABLE và tìm kiếm “DROP” sẽ trả về kết quả khớp

Nhưng có một vấn đề khác. Trước khi bạn đọc tiếp, hãy xem liệu bạn có thể hiểu nó là gì không

Ghi chú

Vâng, thực sự có rất nhiều nếp nhăn và vấn đề chỉ với một chương trình đơn giản. Đó là lý do 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ự xuất sắc. sự khác biệt là xử lý tất cả những chi tiết nhỏ này mà không cần ném iPhone của bạn qua 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 vấn đề tiềm ẩn này với tập lệnh truy vấn của bạn, hãy xem đoạn mã cuối cùng chạy nếu người dùng nhập truy vấn không có hàng như DROP hoặc INSERT

echo "

Connected to MySQL!

";
8

Chạy mã này và bạn sẽ nhận được một cái gì đó giống như bạn thấy trong

Làm cách nào chúng tôi có thể kết nối với cơ sở dữ liệu MySQL từ tập lệnh php trong php?

Hình 4-13. Đôi khi vấn đề tốt nhất bạn có thể giải quyết là vấn đề chưa xảy ra. Hãy xem xét kỹ 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 hàng giờ, nhưng nó cực kỳ quan trọng để giúp các ứng dụng web hoạt động trong thế giới thực

Ghi chú

Nếu bạn đang theo dõi, bạn có thể cần DROP TABLE các url;

Cẩn thận so sánh mã trong và. Trong , bạn sẽ nhận thấy mọi thứ đều viết hoa. Điều đó có ý nghĩa, bởi vì để giúp 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

echo "

Connected to MySQL!

";
9

Sau đó, khi bạn xuất $query_text ở cuối, đầu ra được hiển thị bằng tất cả các chữ cái viết hoa. Đây có phải là một vấn đề lớn? . Nhưng nó tiết lộ một cái gì đó. sau khi chuỗi $query_text đó được chuyển đổi thành chữ hoa, bất cứ khi nào nó được sử dụng, nó 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à như thế này

 
  
 

 
  
  

Example 4-1

SQL Connection test

0

Bây giờ hãy xem xét cùng một truy vấn này, được chuyển thành tất cả các chữ cái viết hoa

 
  
 

 
  
  

Example 4-1

SQL Connection test

1

Tin hay không thì tùy, đây không phải là cùng một truy vấn. SELECT—và hầu hết các truy vấn SQL khác—sẽ coi họ của “MacLachlan” là hoàn toàn khác với “MACLACHLAN. ” Vì vậy, hai truy vấn đó không giống nhau chút nào

Hiện tại, điều này không tạo ra bất kỳ rắc rối nào. Tập lệnh 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 khi chuyển thành phiên bản chữ hoa. Nhưng đây là một vấn đề đang chờ để xảy ra

Nói chung, bạn muốn tránh thay đổi trực tiếp đầu vào từ người dùng. Đó là 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à sau khi bạn đã thay đổi đầu vào đó, bạn không thể quay lại

May mắn thay, biện pháp khắc phục rất đơn giản. thay vì thay đổi đầu vào của người dùng, thay vào đó, bạn sử dụng một biến mới để lưu phiên bản chữ hoa của truy vấn

 
  
 

 
  
  

Example 4-1

SQL Connection test

2

Bạn nên sử dụng biến mới này trong tất cả các phép so sánh chuỗi của mình

 
  
 

 
  
  

Example 4-1

SQL Connection test

3

Dù là một thay đổi nhỏ nhưng nó bảo vệ bạn trong trường hợp bạn cần sử dụng lại chuỗi truy vấn đó

Và cứ như thế, bạn đã thực sự có một công cụ sẽ thực thi bất kỳ truy vấn SQL nào mà bạn ném vào nó. Nhưng vẫn còn nhiều việc phải 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à không có cách nào giải quyết được. kịch bản của bạn khá khó hiểu ngay từ cái nhìn đầu tiên (và thậm chí là lần thứ hai). Trong chương tiếp theo, bạn sẽ giải quyết tất cả những điều này, biến biểu mẫu của bạn từ một biểu mẫu tiện dụng cơ bản thành một bài tập thực sự hay về cơ PHP của bạn

Làm cách nào để kết nối với cơ sở dữ liệu trong PHP?

Trong PHP, chúng ta có thể kết nối với cơ sở dữ liệu bằng máy chủ web XAMPP bằng cách sử dụng đường dẫn sau. .
Khởi động máy chủ XAMPP bằng cách khởi động Apache và MySQL
Viết PHP script để kết nối với XAMPP
Chạy nó trong trình duyệt cục bộ
Cơ sở dữ liệu được tạo thành công dựa trên mã PHP

Làm cách nào để kết nối tập lệnh PHP với MySQL bằng PDO?

Tóm tắt .
Kích hoạt trình điều khiển PDO_MYSQL trong php. ini để kết nối với cơ sở dữ liệu MySQL từ PHP PDO
Tạo một thể hiện của lớp PDO để tạo kết nối với cơ sở dữ liệu MySQL
Sử dụng hàm tạo PDO hoặc phương thức setAttribute() để đặt chiến lược xử lý lỗi