Thiết lập kết nối với mysql và php. Giao tiếp với cơ sở dữ liệu MySQL

Tất cả những gì tôi có thể nói như một lời khuyên cho việc sử dụng cơ sở dữ liệu là cuộc sống không có chúng đơn giản là chết! Cơ sở dữ liệu là một tia sáng exe trong vương quốc đen tối của việc xử lý dữ liệu bằng một chương trình được thông dịch. Cơ sở dữ liệu khiến bạn hơi đau đầu nhưng lại nhẹ nhõm hơn nhiều.

Máy chủ cơ sở dữ liệu được lấy làm ví dụ. Dữ liệu MySQL(Tôi tin rằng làm chủ được nó thì bạn cũng sẽ dễ dàng làm chủ được người khác. Một ngày nào đó tôi cũng sẽ viết về họ, nếu tôi tự làm chủ được :).

Cuộc trò chuyện đầu tiên sẽ nói về Hàm PHP, được sử dụng để làm việc với MySQL. Vì vậy, hãy bắt đầu.

1. Quản trị cơ sở dữ liệu

Các phương pháp quản trị cơ sở dữ liệu theo thứ tự thuận tiện giảm dần:

  • phpMyAdmin (rất khuyến khích!)
  • Viết một đoạn script làm biến dạng cơ sở dữ liệu (xem ví dụ)
  • mysql.exe trong gói mysql
  • mysql_manager.exe (bằng cách nào đó có vẻ như có thể xảy ra, nhưng đang trên bờ vực của pháp sư)

Tôi đặc biệt khuyên dùng phương pháp đầu tiên. Với nó, bạn không cần phải nghiên cứu các truy vấn ALTER TABLE, ADD COLUMN, v.v. Tôi vẫn chưa biết họ. Hơn nữa, “những câu hỏi như vậy, thưa Đồng chí Đại sứ, không thể giải quyết ngay lập tức” - khi nào bạn cần tự động thay đổi cấu trúc của cơ sở dữ liệu hoặc bảng? Một vài lời về phương pháp thứ hai. Có thể nói, đây là một công nghệ giải quyết mà tôi đã sử dụng mà không biết về phpMyAdmin và tiện ích mysqldump. Tập lệnh chứa các lệnh xóa cơ sở dữ liệu và tạo lại cơ sở dữ liệu. Nó đã từng hữu ích, nhưng nói chung, tôi sẽ nói lại, đây là một công nghệ bỏ qua, một “hỗ trợ”.

Trong tương lai: nếu bạn có một số trang web sử dụng cơ sở dữ liệu thì ít nhất trong máy chủ gia đình tạo ra một số cơ sở dữ liệu. Điều này sẽ giúp công việc của máy chủ dễ dàng hơn và loại bỏ khả năng nhầm lẫn bảng. Nhìn chung, các quy tắc làm việc với cơ sở dữ liệu cũng giống như với một trang web - hãy giữ nó trong một thư mục riêng biệt với các thư mục khác.

2. Kết nối với máy chủ cơ sở dữ liệu

Việc này được thực hiện bằng cách sử dụng hàm mysql_connect: $connect = mysql_connect(<хост>, <логин>, <пароль>); Theo mặc định, trên máy chủ mysql, bảng người dùng có người dùng root, chỉ có thể được truy cập từ localhost, nghĩa là từ cùng một máy tính nơi máy chủ mysql được cài đặt. CHÚ Ý! "Có quyền truy cập từ localhost" có nghĩa là tập lệnh PHP của bạn có quyền truy cập và bạn có thể truy cập nó từ bất kỳ máy tính nào khác.

Điều gì xảy ra khi chúng ta gọi hàm mysql_connect? Khi tập lệnh của bạn bắt đầu thực thi, php sẽ phân bổ không gian trong bộ nhớ để lấy thông tin về nó và các biến của nó. Thông tin về tập lệnh được thực thi cũng lưu trữ thông tin về các kết nối tới cơ sở dữ liệu. Biến $connect, nói một cách đại khái, là một con trỏ tới nơi thông tin nàyđược lưu trữ. Biến này hoàn toàn giống với các biến khác - nếu bạn sử dụng hàm, thì bạn cần khai báo các biến toàn cục để truy cập vào nó.

Tại sao biến lại được sử dụng? Đây là trường hợp bạn cần sử dụng một số máy chủ cơ sở dữ liệu cho công việc (hoặc, ví dụ, để đảm bảo tính bảo mật cao hơn, bạn sử dụng các thông tin đăng nhập khác nhau, có thể có các đặc quyền khác nhau). Trong những trường hợp như vậy, mỗi yêu cầu đòi hỏi sự chắc chắn về kênh nào, có thể nói, lệnh sẽ đi qua. Nhưng nếu bạn chỉ sử dụng một kết nối, bạn không cần chỉ định nó trong các tham số của hàm yêu cầu (xem thêm về chúng bên dưới) - php tìm thấy kết nối đầu tiên (và trong trong trường hợp này kết nối duy nhất) được thiết lập và sử dụng nó.

Cơ chế hoạt động của các hàm truy vấn cơ sở dữ liệu cũng giống như cơ chế của hàm kết nối: các tham số của yêu cầu và kết nối (nếu cần) được truyền vào hàm và kết quả được ghi vào một biến:

$result = mysql_db_query(cơ sở dữ liệu chuỗi, truy vấn chuỗi [, biến kết nối]);

$result = mysql_query(truy vấn chuỗi [, biến kết nối]);

CHÚ Ý! Để sử dụng hàm mysql_query, trong đó cơ sở dữ liệu không được chỉ định, trước tiên bạn phải chọn cơ sở dữ liệu để sử dụng:

mysql_select_db(cơ sở dữ liệu chuỗi);

Bây giờ chúng ta có một biến kết quả $. Đây là một con trỏ tới kết quả của truy vấn. Có một số hàng bảng ở đó. Bạn có thể lấy các hàng này bằng cách sử dụng hàm mysql_fetch_row và mysql_fetch_array:

Tiếng vang"

"; while ($row = mysql_fetch_array($result)) echo " "; tiếng vang"
", $row["field1"], "", $row["field2"], "
";

Hàm mysql_fetch_array xuất một mảng thành biến được chỉ định (trong trường hợp này là $row), các chỉ mục của nó là tên của các trường (và nếu bạn viết table.field vào danh sách các trường truy vấn thì chỉ mục mảng sẽ là field ). mysql_fetch_row tạo ra một mảng có chỉ số là các số bắt đầu từ 0.

Sử dụng chức năng nào tốt hơn? Nếu bạn yêu cầu một dấu hoa thị, tức là. tất cả các trường của bảng và các trường cần được hiển thị theo một trình tự nhất định (ví dụ: khi tiêu đề bảng được vẽ), tốt hơn là nên sử dụng mysql_fetch_array. Nếu bạn yêu cầu một, hai hoặc ba trường, biết rõ trình tự của chúng, bạn có thể thực hiện mysql_fetch_row - điều này sẽ làm giảm số lượng mã chương trình.

Đây là các lệnh DELETE và UPDATE. Các truy vấn như vậy có “quyền” giống như SELECT, vì vậy lệnh được gửi đến máy chủ theo cách tương tự - mysql_query (mysql_db_query). Nhưng trong trường hợp này hàm không trả về kết quả:

$result = mysql_query("CHỌN * TỪ có thể"); nhưng mysql_query("DELETE FROM sometable WHERE id=...");

Theo đó, nếu chúng ta thực hiện truy vấn chọn và không ghi kết quả vào một biến thì dữ liệu sẽ không được lưu trữ ở bất kỳ đâu.

5. Xử lý lỗi yêu cầu

Tin nhắn về sai lầm cuối cùng có thể thu được thông qua hàm mysql_error:

echo "Lỗi cơ sở dữ liệu. MySQL ghi:", mysql_error();

Nếu kết quả của một hàm được ghi vào một biến, bạn có thể kiểm tra nó:

$kết quả = mysql_query($request); if (!$result) echo "Lỗi cơ sở dữ liệu. MySQL ghi:", mysql_error(); khác (tiếng vang"

"; while ($row = mysql_fetch_array($result)) echo " "; tiếng vang"
", $row["field1"], "", $row["field2"], "
"; };

Nếu chúng ta không ghi vào một biến thì cũng vậy thôi.

Tôi đặt tên cơ sở dữ liệu của mình là "phptest". Sau khi nhấp vào nút “Tạo”, bạn sẽ tự động được chuyển đến cơ sở dữ liệu bạn đã tạo.

Tạo một bảng trong cơ sở dữ liệu

Không có gì phức tạp trong thủ tục này. Hãy tạo một bảng trong đó chúng ta sẽ lưu trữ tiêu đề của bài viết và chính văn bản:

Có thể bạn đã nhận thấy, tôi đặt số 3 vào số trường, tại sao? Cuối cùng, chúng ta cần tạo hai trường cho tiêu đề và văn bản. Vấn đề là một bảng trong cơ sở dữ liệu phải có một trường bổ sung.Để làm gì? Trường này đại diện cho sự thay thế một số nhận dạng, (nghĩa là chúng ta dường như đếm các hàng của mình trong bảng) bằng cách này, chúng ta có được mỗi hàng của bảng một số duy nhất. Điều này sẽ hữu ích cho việc tìm kiếm chuỗi chúng ta cần trong cơ sở dữ liệu. Trường này thường được gọi là id và được đặt thành nó AUTO_INCREMENT(Tôi sẽ chỉ cho bạn nơi nó được trưng bày bên dưới). AUTO_INCREMENT cho phép bạn chỉ định mỗi dòng một số duy nhất, do đó bạn sẽ không tìm thấy bản ghi có cùng số trong bảng cơ sở dữ liệu!

Sau khi điền tên và số trường, nhấp vào “OK” và bạn sẽ được đưa đến trang tạo trường. Thú thực với các bạn là tôi không thực sự hiểu mình đang làm gì khi tạo các trường, nhưng điều đó không ngăn cản tôi làm việc với chúng, hãy điền vào như thế này:

Và điền vào hai trường chúng ta cần:

Tại sao chỉ có hai? Bởi vì trường id đầu tiên sẽ được điền tự động do AUTO_INCREMENT. Nhấp vào "OK". Bây giờ trong tab “Tổng quan”, bạn có thể thấy dòng chúng tôi đã tạo trong bảng:

Chà, chúng ta đã học cách tạo bảng và hàng thông qua bảng điều khiển phpmyadmin, việc này đã tiến triển rồi. Nhân tiện, tôi muốn lưu ý rằng giao diện của bảng này rất trực quan, bạn có thể dễ dàng nhấn các nút ở đó và tìm hiểu xem đó là gì Gì

Đã đến lúc tìm hiểu cách tạo, xóa và cập nhật các hàng trong bảng đã tạo bằng PHP. Để bạn hiểu rõ hơn những gì tôi đang nói với bạn, chúng tôi sẽ viết một bảng quản trị nhỏ cho trang web và khi mọi việc diễn ra, tôi sẽ cho bạn biết nội dung và cách thức.

Xuất bản ghi từ cơ sở dữ liệu

Hãy bắt đầu với điều này, vì khi tạo bất kỳ dự án nào, bạn cần phải nhìn rõ quy trình và rất khó thực hiện nếu không có đầu ra (Tôi sẽ làm việc với tệp test.php, đừng ngạc nhiên khi bạn thấy các liên kết trong mã tới tập tin này). Chúng ta sẽ rút lui như thế nào? À, đầu tiên chúng ta cần kết nối với cơ sở dữ liệu, sau khi sử dụng vòng lặp do while (Học PHP - Vòng lặp) chúng ta sẽ lấy các bản ghi từ cơ sở dữ liệu. Bắt đầu nào

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

Kết nối được thực hiện như thế nào? Chú ý đến cú pháp:

mysql_select_db(Tên cơ sở dữ liệu, mysql_connect(Máy chủ, tên người dùng DB, mật khẩu người dùng DB));

Tên cơ sở dữ liệu, người dùng máy chủ và mật khẩu do bạn tạo hoặc do nhà cung cấp dịch vụ lưu trữ của bạn cung cấp. Ví dụ Máy chủ cục bộ, bạn tự tạo một số dữ liệu hoặc sử dụng những dữ liệu đã được tạo. Các kết nối tới cơ sở dữ liệu mà tôi đã tạo sẽ trông như thế này:






// KẾT NỐI VỚI CƠ SỞ DỮ LIỆU (DB)

Máy chủ, người dùng và mật khẩu được tạo theo mặc định (trong trường hợp này, chúng tôi có thể nói rằng hầu hết tất cả dữ liệu đều được nhà cung cấp dịch vụ lưu trữ cung cấp cho chúng tôi). Từ dữ liệu của tôi, tôi chỉ chỉ ra tên của cơ sở dữ liệu. Nhân tiện, cái này mã php, và do đó phải nằm trong dấu ngoặc đặc biệt ()

  • Đầu ra dữ liệu

Chúng ta cần hiển thị dữ liệu từ bảng trang. Hãy chú ý đến cú pháp đầu ra:

$result = mysql_query("CHỌN Những gì chúng tôi lấy ra TỪ tên bảng trong cơ sở dữ liệu");

Dòng đầu tiên cho phép chúng ta chỉ định cột nào chúng ta cần trích xuất và từ cơ sở dữ liệu nào.

Dòng thứ hai đặt mọi thứ tìm thấy vào một biến...

CHÚ Ý Có một vài điểm mà tôi muốn làm rõ. Hãy giải quyết một số vấn đề:

  • Chúng ta cần trích xuất tất cả các trường từ bảng.

Làm cách nào để trích xuất tất cả các trường từ bảng trang? như thế này:

$result = mysql_query("CHỌN * TỪ trang");
$myrow = mysql_fetch_array($result);

Bạn có thể nhận thấy rằng tôi đặt dấu hoa thị (*) sau CHỌN. Dấu hoa thị có nghĩa là tôi cần giải nén tất cả các trường từ bảng

  • Chúng ta chỉ cần trích xuất một trường từ bảng

Làm cách nào để chỉ trích xuất trường văn bản từ một bảng? như thế này:

$result = mysql_query("CHỌN văn bản TỪ trang");
$myrow = mysql_fetch_array($result);

Để trích xuất không phải tất cả các trường mà chỉ một số trường, bạn cần liệt kê các trường bắt buộc sau CHỌN, phân tách bằng dấu phẩy.

  • Chúng ta cần trích xuất các trường không phải từ toàn bộ bảng mà chỉ từ một dòng

Làm cách nào để trích xuất tất cả các trường từ dòng đầu tiên? Chúng tôi biết rằng dòng đầu tiên có id bằng một, hãy sử dụng kiến ​​thức này:

Sau khi CHỌN, tôi đã giải thích, phân tách bằng dấu phẩy, những trường nào cần trích xuất, sau đó tôi thêm vào dòng mới WHERE (có nghĩa là “ở đâu”) id bằng 1. Do đó, tôi lấy ra các trường tôi cần từ dòng có id bằng một

Nào, hãy bắt đầu tạo đầu ra cho bài viết của chúng ta nhé? Chúng tôi sẽ chỉ hiển thị các tiêu đề, hãy bắt đầu:


$myrow = mysql_fetch_array($result);

LÀM
{
echo "".$myrow."
";
}

Chúng ta đã làm gì? Chúng tôi đã lấy hai trường từ bảng, id và tiêu đề. Tiếp theo, chúng tôi khởi chạy vòng lặp do while (Học PHP - Chu kỳ) và tạo liên kết bằng cách sử dụng dữ liệu được trích xuất từ ​​cơ sở dữ liệu. Dữ liệu được lưu trữ trong biến $myrow, biến này là một mảng, các khóa của mảng là tên các trường của chúng ta trong cơ sở dữ liệu. Đây là những gì đã xảy ra:

Các tiêu đề là đầu ra, bây giờ hãy sắp xếp đầu ra tin nhắn đầy đủ khi bạn bấm vào một liên kết có tiêu đề. Để thực hiện việc này trong một tệp, hãy thêm các điều kiện if()():

// KẾT NỐI VỚI CƠ SỞ DỮ LIỆU (DB)
$nameDB = "phptest";//Tên cơ sở dữ liệu
$nameSERVER = "localhost";//Máy chủ
$nameUSER = "root";//Tên người dùng cơ sở dữ liệu
$passUSER = "";//Mật khẩu người dùng DB
mysql_select_db($nameDB, mysql_connect($nameSERVER,$nameUSER,$passUSER));
// KẾT NỐI VỚI CƠ SỞ DỮ LIỆU (DB)

// TIÊU ĐỀ ĐẦU RA
if(!isset($_GET["id"]))
{
$result = mysql_query("CHỌN id,tiêu đề TỪ trang");
$myrow = mysql_fetch_array($result);

LÀM
{
echo "".$myrow."
";
}
while ($myrow = mysql_fetch_array($result));
}
// TIÊU ĐỀ ĐẦU RA

// XUẤT VĂN BẢN ĐẦY ĐỦ
if(isset($_GET["id"]))
{

$myrow = mysql_fetch_array($result);

echo $myrow;
}
// XUẤT VĂN BẢN ĐẦY ĐỦ
?>

Tôi đã thêm hai điều kiện. Chúng ta sẽ chỉ thấy danh sách có tiêu đề nếu biến toàn cục $_GET["id"] không tồn tại. Chúng ta sẽ chỉ thấy toàn văn nếu biến này tồn tại. Trong trường hợp này, chúng tôi sẽ chỉ hiển thị một bản ghi mà chúng tôi cần từ cơ sở dữ liệu. Đây là những gì chúng tôi có:

Bây giờ tôi nghĩ đã đến lúc tìm hiểu cách thêm hàng mới vào bảng.

Thêm dữ liệu vào cơ sở dữ liệu

Hãy bắt đầu thêm bằng cách tạo một biểu mẫu, đây là một đoạn mã cần được thêm vào cuối tệp của chúng ta:

// MẪU THÊM MỤC
if(isset($_GET["add"]))
{
tiếng vang "







";
}
// MẪU THÊM MỤC

Biểu mẫu này sẽ chỉ xuất hiện nếu biến toàn cục $_GET["add"] tồn tại, vì vậy ở đâu đó ở phía dưới bạn cần chèn một liên kết để thêm một bài viết mới. Cách tốt nhất để làm điều này là trong mã đầu ra tiêu đề; bạn cũng có thể chỉnh sửa điều kiện để xuất tiêu đề của chúng tôi như thế này:

// TIÊU ĐỀ ĐẦU RA
if(!isset($_GET["id"]) VÀ !isset($_GET["add"]))
{
$result = mysql_query("CHỌN id,tiêu đề TỪ trang");
$myrow = mysql_fetch_array($result);

LÀM
{
echo "".$myrow."
";
}
while ($myrow = mysql_fetch_array($result));

tiếng vang "


Thêm bài đăng";
}
// TIÊU ĐỀ ĐẦU RA

Tôi đã chỉnh sửa điều kiện để danh sách tiêu đề không xuất hiện khi biểu mẫu được hiển thị, đây là điều đã xảy ra:

$result = mysql_query("INSERT INTO tên bảng trong cơ sở dữ liệu (trường 1 của cơ sở dữ liệu, trường 2 của cơ sở dữ liệu) GIÁ TRỊ ("dữ liệu 1",,"dữ liệu 2")");

Bây giờ hãy viết một trình xử lý cho bảng quản trị nhỏ của chúng tôi và bạn sẽ hiểu mọi thứ. Đây là một đoạn mã mà tôi đã đăng ngay sau khi kết nối với cơ sở dữ liệu:

// THÊM MỤC

{

header("vị trí: test.php");
lối ra;
}
// THÊM MỤC

Điều kiện là biến toàn cục $_POST, nghĩa là nếu chúng ta điền vào biểu mẫu và nhấp vào nút “Thêm bài đăng”, điều kiện của chúng ta sẽ hoạt động. Trường tiêu đề sẽ chứa dữ liệu từ biến toàn cục $_POST và trường văn bản sẽ chứa $_POST. Tiếp theo, dòng header("location: test.php") sẽ hoạt động, cho phép bạn chuyển hướng người dùng đến một trang khác, trong trường hợp này trang này sẽ là test.php. Và lối ra dòng; làm gián đoạn việc thực thi các tập lệnh khác. Đây là những gì đã xảy ra:

Chỉnh sửa dữ liệu trong cơ sở dữ liệu

Để chỉnh sửa một bản ghi cụ thể trong cơ sở dữ liệu của chúng tôi, đương nhiên chúng tôi cần xác định bản ghi nào cần chỉnh sửa... Tôi khuyên bạn nên hiển thị nút chỉnh sửa trong mã đầu ra toàn văn, hãy chỉnh sửa nó:

// XUẤT VĂN BẢN ĐẦY ĐỦ
if(isset($_GET["id"]))
{
$result = mysql_query("CHỌN văn bản TỪ trang WHERE id="$_GET"");
$myrow = mysql_fetch_array($result);

echo $myrow;
tiếng vang "


Chỉnh sửa bài";
}
// XUẤT VĂN BẢN ĐẦY ĐỦ


if(isset($_GET["edd"]))
{

$myrow = mysql_fetch_array($result);

Tiếng vang"








";
}
// MỤC CHỈNH SỬA MẪU

Tôi đã thêm đoạn mã này sau biểu mẫu thêm bản ghi. Hình thức này gần giống với hình thức thêm bài viết. Như bạn có thể nhận thấy, tôi đã làm lại thuộc tính tên và thêm thuộc tính giá trị. Trong thuộc tính này, tôi đặt dữ liệu mà tôi đã lấy từ cơ sở dữ liệu. Ở đây cũng có một trường vô hình. Cần gửi mã định danh bản ghi đến trình xử lý tệp.

Bây giờ, để đảm bảo rằng khi hiển thị biểu mẫu này trên màn hình không có danh sách các tiêu đề, hãy sửa điều kiện:

// TIÊU ĐỀ ĐẦU RA

{
$result = mysql_query("CHỌN id,tiêu đề TỪ trang");
$myrow = mysql_fetch_array($result);

LÀM
{
echo "".$myrow."
";
}
while ($myrow = mysql_fetch_array($result));

tiếng vang "


Thêm bài đăng";
}
// TIÊU ĐỀ ĐẦU RA

Đã đến lúc tìm hiểu cách chỉnh sửa các bản ghi trong cơ sở dữ liệu. Đây là cú pháp:

Bây giờ hãy viết một trình xử lý. Đây là một đoạn mã mà tôi đã thêm ngay sau trình xử lý để thêm bản ghi:

// CHỈNH SỬA MỤC

{

header("vị trí: test.php");
lối ra;
}
// CHỈNH SỬA MỤC

Điều kiện cho thấy trình xử lý sẽ chỉ chạy nếu chúng ta nhấp vào nút “chỉnh sửa bài đăng”. Hơn nữa đang cập nhật Cơ sở dữ liệu. Trong trường tiêu đề, chúng ta sẽ đặt giá trị của biến toàn cục $_POST và trong trường văn bản - $_POST. Chúng ta sẽ chỉnh sửa dòng có id bằng biến toàn cục $_POST. Sau đó chúng tôi chuyển hướng người dùng quay lại danh sách các tiêu đề:

Xóa bản ghi khỏi cơ sở dữ liệu

Chà, điều cuối cùng còn lại để chúng ta nghiên cứu là xóa.. Nó đơn giản hơn tất cả những thứ khác, vì vậy hãy chú ý đến cú pháp:

Để xóa một số bài đăng, bạn cần đặt một liên kết ở đâu đó mà người dùng có thể xóa một số bài đăng... hãy đặt liên kết này ở đầu ra của toàn bộ bài đăng:

// XUẤT VĂN BẢN ĐẦY ĐỦ
if(isset($_GET["id"]))
{
$result = mysql_query("CHỌN văn bản TỪ trang WHERE id="$_GET"");
$myrow = mysql_fetch_array($result);

echo $myrow;
tiếng vang "


Chỉnh sửa bài";
tiếng vang "
Xóa bài đăng";
}
// XUẤT VĂN BẢN ĐẦY ĐỦ

Kết quả công việc

Đây mã đầy đủ bài viết hôm nay:

// KẾT NỐI VỚI CƠ SỞ DỮ LIỆU (DB)
$nameDB = "phptest";//Tên cơ sở dữ liệu
$nameSERVER = "localhost";//Máy chủ
$nameUSER = "root";//Tên người dùng cơ sở dữ liệu
$passUSER = "";//Mật khẩu người dùng DB
mysql_select_db($nameDB, mysql_connect($nameSERVER,$nameUSER,$passUSER));
// KẾT NỐI VỚI CƠ SỞ DỮ LIỆU (DB)

// THÊM MỤC
if(isset($_POST["title_post"]) VÀ isset($_POST["text_post"]))
{
$result = mysql_query("CHÈN VÀO trang (tiêu đề, văn bản) GIÁ TRỊ ("$_POST","$_POST")");
header("vị trí: test.php");
lối ra;
}
// THÊM MỤC

// CHỈNH SỬA MỤC
if(isset($_POST["title_post_edd"]) VÀ isset($_POST["text_post_edd"]))
{
$result = mysql_query("CẬP NHẬT trang SET title="$_POST", text="$_POST" WHERE id="$_POST"");!}
header("vị trí: test.php");
lối ra;
}
// CHỈNH SỬA MỤC

// XÓA MỤC VÀO
if(isset($_GET["del"]))
{
$result = mysql_query("XÓA TỪ trang WHERE id="$_GET"");
header("vị trí: test.php");
lối ra;
}
// XÓA MỤC VÀO

// TIÊU ĐỀ ĐẦU RA
if(!isset($_GET["id"]) VÀ !isset($_GET["add"]) VÀ !isset($_GET["edd"]))
{
$result = mysql_query("CHỌN id,tiêu đề TỪ trang");
$myrow = mysql_fetch_array($result);

LÀM
{
echo "".$myrow."
";
}
while ($myrow = mysql_fetch_array($result));

tiếng vang "


Thêm bài đăng";
}
// TIÊU ĐỀ ĐẦU RA

// XUẤT VĂN BẢN ĐẦY ĐỦ
if(isset($_GET["id"]))
{
$result = mysql_query("CHỌN văn bản TỪ trang WHERE id="$_GET"");
$myrow = mysql_fetch_array($result);

echo $myrow;
tiếng vang "


Chỉnh sửa bài";
tiếng vang "
Xóa bài đăng";
}
// XUẤT VĂN BẢN ĐẦY ĐỦ

// MẪU THÊM MỤC
if(isset($_GET["add"]))
{
tiếng vang "







";
}
// MẪU THÊM MỤC

// MỤC CHỈNH SỬA MẪU
if(isset($_GET["edd"]))
{
$result = mysql_query("CHỌN * TỪ trang WHERE id="$_GET"");
$myrow = mysql_fetch_array($result);

Tiếng vang"








";
}
// MỤC CHỈNH SỬA MẪU
?>

Phần kết luận

Vật liệu hóa ra khá phức tạp. Nhưng! Bạn có thể nhận thấy rằng tôi chỉ sử dụng thông tin mà tôi đã cung cấp trước đó. Điều này có nghĩa là với kiến ​​thức này, bạn có thể tạo các dự án đơn giản bằng PHP! Nếu bạn đã thành thạo tất cả những điều này, thì bạn có thể tự hào nói rằng bạn là một lập trình viên mới vào nghề! Chà, bây giờ bạn có thể bắt đầu tạo cmt đầu tiên của mình. Nếu bạn có bất kỳ câu hỏi nào và rất có thể là có, hãy hỏi, tôi sẽ giúp đỡ bằng mọi cách có thể! Chúc may mắn cho bạn, đó là tất cả cho ngày hôm nay!

P.S.: Tập tin mdf là gì? Làm thế nào để mở nó? Làm thế nào để mở nó? Những câu hỏi này và nhiều câu hỏi khác có thể được trả lời tại voprosi4ek.ru

LÀM VIỆC VỚI CƠ SỞ DỮ LIỆU MySQL BẰNG CÁC CÔNG CỤ PHP

Bài học. Chuẩn bị bởi Prokhorov V.S.


1. KẾT NỐI KỊCH BẢN PHP với bảng MySQL

Hãy xem các hàm được sử dụng phổ biến nhất cho phép bạn làm việc với cơ sở dữ liệu MySQL bằng PHP.

Khi PHP và MySQL tương tác, chương trình sẽ tương tác với DBMS thông qua một tập hợp các hàm.

1.1 Kết nối với máy chủ. Chức năng mysql_connect

Trước khi làm việc với cơ sở dữ liệu, bạn phải cài đặt Kết nối mạng, cũng như ủy quyền cho người dùng. Hàm mysql_connect() được sử dụng cho việc này.

tài nguyên mysql_connect(]])

Chức năng này thiết lập kết nối mạng tới cơ sở dữ liệu MySQL nằm trên máy chủ $server (theo mặc định đây là localhost, tức là. máy tính hiện tại) và trả về mã định danh mở kết nối. Tất cả các công việc tiếp theo được thực hiện với mã định danh này. Tất cả các hàm khác lấy mã định danh (xử lý) này làm đối số sẽ nhận dạng duy nhất cơ sở dữ liệu đã chọn. Khi đăng ký, hãy chỉ định tên người dùng $username và mật khẩu $password (theo mặc định, tên người dùng mà quy trình hiện tại đang chạy - khi gỡ lỗi tập lệnh: root và mật khẩu trống):

$dbpasswd = ""; //Mật khẩu

//Hiển thị cảnh báo

tiếng vang("

");

Các biến $dblocation, $dbuser và $dbpasswd lưu trữ tên máy chủ, tên người dùng và mật khẩu.

1.2 Ngắt kết nối với máy chủ. Chức năng mysql_close

Kết nối tới máy chủ MySQL sẽ tự động bị đóng khi tập lệnh hoàn tất hoặc khi hàm mysql_close được gọi

bool mysql_close()

Hàm này đóng kết nối với máy chủ MySQL và trả về true nếu thao tác thành công và trả về false nếu ngược lại. Hàm này lấy làm đối số là bộ điều khiển kết nối cơ sở dữ liệu được hàm mysql_connect trả về.

$dblocation = "localhost"; //Tên máy chủ

$dbuser = "gốc"; //Tên tài khoản

$dbpasswd = ""; //Mật khẩu

//Kết nối với máy chủ cơ sở dữ liệu

// Loại bỏ lỗi xuất ra bằng ký hiệu @ trước khi gọi hàm

$dbcnx = @ mysql_connect($dblocation, $dbuser, $dbpasswd);

if (!$dbcnx) //Nếu bộ mô tả bằng 0, kết nối không được thiết lập

//Hiển thị cảnh báo

tiếng vang("

B Hiện nay Máy chủ cơ sở dữ liệu không có sẵn nên trang không thể hiển thị chính xác.");

if (mysql_close($dbcnx)) //đóng kết nối

echo("Kết nối cơ sở dữ liệu đã bị ngắt");

echo("Chúng tôi không thể hoàn tất kết nối");

1.3 Tạo cơ sở dữ liệu TẠO hàm cơ sở dữ liệu

Lệnh - tạo cơ sở dữ liệu chỉ khả dụng đối với quản trị viên máy chủ và trên hầu hết các trang web lưu trữ, lệnh này không thể được thực thi:

TẠO CƠ SỞ DỮ LIỆUDatabaseName

Tạo căn cứ mới dữ liệu có tên DatabaseName.

Một ví dụ về cách làm việc với chức năng này:

@mysql_query("TẠO CƠ SỞ DỮ LIỆU $dbname");

Bạn nên sử dụng dấu nháy đơn (“SQL – command”) ở mọi nơi làm dấu phân cách cho các dòng chứa lệnh SQL –. Điều này đảm bảo rằng không có biến $ nào bị nội suy vô tình (tức là được thay thế bằng giá trị của nó) và tăng tính bảo mật của tập lệnh.

Lệnh tạo cơ sở dữ liệu CREATE DATABASE chỉ có sẵn cho siêu người dùng và trên hầu hết các dịch vụ lưu trữ. cho người dùng đơn giản không thể thực hiện được nó. Nó chỉ có sẵn cho quản trị viên máy chủ.

Đối với các thử nghiệm, hãy tạo cơ sở dữ liệu cơ sở thử nghiệm bằng cách thực hiện truy vấn SQL từ dòng lệnh. Để làm điều này bạn cần phải đăng nhập Hệ thống MySQL và nhập vào dòng lệnh MySQL:

mysql> tạo cơ sở dữ liệu thử nghiệm;

Sau này bạn nên gõ:

mysql>sử dụng cơ sở thử nghiệm;

Cơ sở dữ liệu được tạo:



1.4 Lựa chọn cơ sở dữ liệu Chức năng mysql_select_db

Trước khi gửi yêu cầu đầu tiên máy chủ MySQL, chúng ta cần chỉ ra cơ sở dữ liệu nào chúng ta sẽ làm việc với. Hàm mysql_select_db được thiết kế cho việc này:

bool mysql_select_db(chuỗi $database_name [,resource $link_identifier])

Nó thông báo cho PHP rằng các hoạt động trong tương lai trên kết nối $link_identifier sẽ sử dụng cơ sở dữ liệu $database_name.

Việc sử dụng hàm này tương đương với việc gọi lệnh use trong truy vấn SQL, tức là hàm mysql_select_db chọn cơ sở dữ liệu cho công việc tiếp theo và tất cả các truy vấn SQL tiếp theo sẽ được áp dụng cho cơ sở dữ liệu đã chọn. Hàm lấy đối số là tên của cơ sở dữ liệu đã chọn tên_cơ sở dữ liệu và tài nguyên mô tả kết nối. Hàm trả về true nếu thao tác thành công và trả về false nếu ngược lại:

//Mã kết nối cơ sở dữ liệu

if (! @mysql_select_db($dbname, $dbcnx))

//Hiển thị cảnh báo

tiếng vang("

Cơ sở dữ liệu hiện không có sẵn nên trang không thể hiển thị chính xác.");

1.5 Xử lý lỗi

Nếu xảy ra lỗi khi làm việc với MySQL (ví dụ: dấu ngoặc đơn trong truy vấn không cân bằng hoặc không có đủ tham số), thì có thể lấy được thông báo lỗi và số của nó bằng cách sử dụng hai hàm được mô tả bên dưới.

Điều quan trọng là phải sử dụng các chức năng này một cách cẩn thận và kịp thời, vì nếu không thì việc gỡ lỗi các tập lệnh có thể trở nên khó khăn hơn.

● Chức năng:

int mysql_errno()

trả về số lỗi được báo cáo cuối cùng. Mã định danh kết nối $link_identifier có thể được bỏ qua nếu chỉ có một kết nối được thiết lập trong quá trình thực thi tập lệnh.

● Chức năng:

chuỗi mysql_error()

trả về không phải một số mà là một chuỗi chứa nội dung của thông báo lỗi. Nó thuận tiện để sử dụng cho mục đích gỡ lỗi. Thông thường mysql_error được sử dụng cùng với cấu trúc or die(), ví dụ:

@mysql_connect("localhost", "người dùng", "mật khẩu")

hoặc die("Lỗi kết nối tới cơ sở dữ liệu: ".mysql_error());

Toán tử @, như thường lệ, có tác dụng ngăn chặn cảnh báo tiêu chuẩn có thể xảy ra trong trường hợp có lỗi.

TRONG phiên bản mới nhất Cảnh báo PHP không được ghi vào các hàm MySQL theo mặc định.

1.6 Tự động hóa kết nối với MySQL. Tài liệu ( config.php )

Thông thường, có một số tập lệnh trên một trang cần truy cập vào cùng một cơ sở dữ liệu.

Nên tách mã chịu trách nhiệm kết nối với MySQL thành tập tin riêng biệt và sau đó kết nối bằng cách sử dụng bao gồm các chức năng vào các kịch bản cần thiết.

Thật hợp lý khi đặt các hàm để kết nối, chọn và tạo cơ sở dữ liệu trong cùng một tệp (config.php), trong đó các biến có tên máy chủ $dblocation, tên người dùng $dbuser, mật khẩu $dbpasswd và tên cơ sở dữ liệu $dbname được khai báo:

danh sách config.php:

//config.php code của file chứa các tham số kết nối tới server và chọn cơ sở dữ liệu

//xuất thông báo lỗi kết nối ra trình duyệt

$dblocation = "localhost"; //Tên máy chủ

$dbname = "chèn tên cơ sở dữ liệu" // Tên cơ sở dữ liệu: đang được tạo hoặc hiện có

$dbuser = "gốc"; //tên người dùng cơ sở dữ liệu

$dbpasswd = ""; //Mật khẩu

//Kết nối với máy chủ cơ sở dữ liệu

// Loại bỏ lỗi xuất ra bằng ký hiệu @ trước khi gọi hàm

$dbcnx=@mysql_connect($dblocation,$dbuser,$dbpasswd);

if (!$dbcnx) //Nếu bộ mô tả bằng 0, kết nối đến máy chủ cơ sở dữ liệu không được thiết lập

//Hiển thị cảnh báo

tiếng vang("

Máy chủ cơ sở dữ liệu hiện không khả dụng nên trang không thể hiển thị chính xác.

");

//Tạo cơ sở dữ liệu $dbname - chỉ siêu người dùng mới có thể thực hiện việc này

// Nếu cơ sở dữ liệu đã tồn tại thì sẽ xảy ra lỗi không nghiêm trọng

@mysql_query("TẠO CƠ SỞ DỮ LIỆU nếu chưa tồn tại $dbname’);

// Mã kết nối tới cơ sở dữ liệu: chúng tôi thực hiện lựa chọn rõ ràng cơ sở dữ liệu mới được tạo hoặc cơ sở dữ liệu đã có cơ sở hiện có dữ liệu

// Loại bỏ lỗi xuất ra bằng ký hiệu @ trước khi gọi hàm

if(!@mysql_select_db($dbname, $dbcnx)) //Nếu bộ mô tả bằng 0, kết nối tới cơ sở dữ liệu không được thiết lập

//Hiển thị cảnh báo

tiếng vang("

Cơ sở dữ liệu hiện không có sẵn nên trang không thể hiển thị chính xác.

");

//Bé nhỏ chức năng phụ trợ, hiển thị một thông báo

// thông báo lỗi trong trường hợp lỗi truy vấn cơ sở dữ liệu

hàm puterror($message)

tiếng vang("");



2. THỰC HIỆN TRUY VẤN CƠ SỞ DỮ LIỆU

2.1 Tạo bảng. Chức năng TẠO BẢNG:

TẠO BẢNG Tên bảng (loại Tên trường, loại Tên trường,)

Lệnh này tạo một bảng mới trong cơ sở dữ liệu với các cột (trường) được xác định bởi tên của chúng (FieldName) và các loại được chỉ định. Sau khi tạo bảng, bạn có thể thêm bản ghi vào bảng bao gồm các trường được liệt kê trong lệnh này.

Danh sách test_11.php. Chương trình tạo ra bảng mới trong cơ sở dữ liệu:

include "config.php";//Kết nối với máy chủ và chọn cơ sở dữ liệu

mysql_query("TẠO BẢNG nếu chưa tồn tại mọi người

id INT AUTO_INCREMENT KHÓA CHÍNH,

hoặc die("Lỗi MySQL: ".mysql_error());



Tập lệnh này tạo một bảng mới có hai trường. Trường đầu tiên có kiểu INT (số nguyên) và tên id. Thứ hai là kiểu TEXT (chuỗi văn bản) và tên tên.

Nếu bảng tồn tại, cấu trúc or die() sẽ hoạt động.

Mệnh đề tùy chọn nếu không tồn tại, khi được chỉ định, sẽ báo cho máy chủ MySQL rằng nó sẽ không tạo ra thông báo lỗi nếu một bảng có tên được chỉ định đã tồn tại trong cơ sở dữ liệu.

Khả năng lưu trữ và truy xuất hiệu quả một lượng lớn thông tin đã góp phần to lớn vào sự phát triển thành công của Internet. Thông thường cơ sở dữ liệu được sử dụng để lưu trữ thông tin. Hoạt động của các trang web nổi tiếng như Yahoo, Amazon và Ebay phần lớn phụ thuộc vào độ tin cậy của cơ sở dữ liệu lưu trữ lượng thông tin khổng lồ. Tất nhiên, hỗ trợ cơ sở dữ liệu không chỉ mang lại lợi ích cho các tập đoàn khổng lồ—các nhà lập trình web có sẵn một số triển khai cơ sở dữ liệu mạnh mẽ theo ý của họ, được phân phối với chi phí tương đối thấp (hoặc thậm chí miễn phí).

Tổ chức cơ sở dữ liệu phù hợp cung cấp khả năng truy xuất dữ liệu nhanh hơn và linh hoạt hơn. Nó đơn giản hóa đáng kể việc triển khai các công cụ tìm kiếm và sắp xếp, đồng thời các vấn đề về quyền truy cập thông tin được giải quyết bằng cách sử dụng các điều khiển đặc quyền có trong nhiều hệ thống quản lý cơ sở dữ liệu (DBMS). Ngoài ra, quá trình sao chép và lưu trữ dữ liệu được đơn giản hóa.

Chương này bắt đầu bằng mô tả chi tiết về cách truy xuất và cập nhật dữ liệu trong MySQL, có lẽ là DBMS phổ biến nhất được sử dụng trong PHP (http://www.mysql.com). Lấy MySQL làm ví dụ, chúng tôi sẽ chỉ ra cách tải và cập nhật dữ liệu trong cơ sở dữ liệu trong PHP; Chúng ta sẽ xem xét các công cụ tìm kiếm và sắp xếp cơ bản được sử dụng trong nhiều ứng dụng web. Sau đó, chúng ta sẽ chuyển sang hỗ trợ của PHP dành cho ODBC (Kết nối cơ sở dữ liệu mở), một giao diện chung có thể được sử dụng để kết nối với các DBMS khác nhau cùng một lúc. Hỗ trợ ODBC trong PHP sẽ được thể hiện bằng cách kết nối và truy xuất dữ liệu từ cơ sở dữ liệu Microsoft Access. Chương này kết thúc bằng một dự án sử dụng PHP và MySQL để tạo một thư mục phân cấp chứa thông tin về các trang web yêu thích. Khi các trang web mới được đưa vào danh mục, người dùng sẽ chỉ định chúng vào một trong các danh mục tiêu chuẩn do quản trị viên trang xác định.

Trước khi thảo luận về MySQL, tôi muốn nói vài lời về SQL, ngôn ngữ phổ biến nhất để làm việc với cơ sở dữ liệu. Ngôn ngữ SQL là nền tảng của hầu hết các DBMS hiện có. Để chuyển sang xem các ví dụ về cách làm việc với cơ sở dữ liệu, ít nhất bạn cần có hiểu biết chung về cách hoạt động của SQL.

SQL là gì?

SQL thường được mô tả là ngôn ngữ tiêu chuẩn được sử dụng để tương tác với cơ sở dữ liệu quan hệ (xem bên dưới). Tuy nhiên, SQL không phải là ngôn ngữ lập trình như C, C++ hay PHP. Đúng hơn, nó là một công cụ giao diện để thực hiện các hoạt động cơ sở dữ liệu khác nhau, cung cấp cho người dùng một bộ lệnh tiêu chuẩn. Khả năng của SQL không bị giới hạn trong việc lấy dữ liệu từ cơ sở dữ liệu. SQL hỗ trợ nhiều tùy chọn khác nhau để tương tác với cơ sở dữ liệu, bao gồm:

  • định nghĩa cấu trúc dữ liệu
-- định nghĩa các cấu trúc được sử dụng khi lưu trữ dữ liệu;
  • lấy mẫu dữ liệu
  • -- tải dữ liệu từ cơ sở dữ liệu và trình bày nó ở định dạng thuận tiện cho đầu ra;
  • xử lí dữ liệu
  • -- chèn, cập nhật và xóa thông tin;
  • kiểm soát truy cập
  • -- khả năng cho phép/cấm lấy mẫu, chèn, cập nhật và xóa dữ liệu ở cấp độ người dùng cá nhân;
  • kiểm soát tính toàn vẹn dữ liệu
  • -- Bảo toàn cấu trúc dữ liệu trong trường hợp xảy ra sự cố như cập nhật song song hoặc lỗi hệ thống.

    Xin lưu ý rằng định nghĩa của SQL nêu rõ rằng ngôn ngữ này được thiết kế để hoạt động với quan hệ cơ sở dữ liệu. Trong DBMS quan hệ, dữ liệu được tổ chức dưới dạng tập hợp các bảng được kết nối với nhau. Mối quan hệ giữa các bảng được thực hiện dưới dạng liên kết đến dữ liệu từ các bảng khác. Bàn có thể được coi là một mảng hai chiều trong đó vị trí của từng phần tử được đặc trưng bởi các giá trị hàng và cột cụ thể. Một ví dụ về cơ sở dữ liệu quan hệ được hiển thị trong Hình. 11.1.

    Cơm. 11.1. Ví dụ về cơ sở dữ liệu quan hệ

    Như có thể thấy từ hình. 11.1, mỗi bảng bao gồm các hàng (bản ghi) và cột (trường). Mỗi trường được gán một tên duy nhất (trong bảng). Lưu ý mối quan hệ giữa bảng khách hàng và đơn đặt hàng, được biểu thị bằng một mũi tên. Một mã nhận dạng khách hàng ngắn gọn được bao gồm trong thông tin đặt hàng, giúp tránh việc lưu trữ dư thừa tên khách hàng và các chi tiết khác. Có thêm một mối quan hệ nữa trong cơ sở dữ liệu được hiển thị - giữa bảng đơn hàng và bảng sản phẩm. Kết nối này được thiết lập bằng cách sử dụng trường prod_id, trường này lưu trữ mã nhận dạng của sản phẩm do khách hàng này đặt hàng (được xác định bởi trường custjd). Việc có những kết nối này giúp bạn dễ dàng tham chiếu dữ liệu sản phẩm và khách hàng hoàn chỉnh bằng cách sử dụng các mã nhận dạng đơn giản. Cơ sở dữ liệu được tổ chức hợp lý sẽ trở thành một công cụ mạnh mẽ để tổ chức và lưu trữ dữ liệu hiệu quả với mức độ dư thừa tối thiểu. Hãy nhớ cơ sở dữ liệu này, tôi sẽ đề cập đến nó thường xuyên trong các ví dụ tiếp theo.

    Vậy các hoạt động cơ sở dữ liệu quan hệ được thực hiện như thế nào? Để thực hiện điều này, SQL có một tập hợp các lệnh chung đặc biệt - chẳng hạn như CHỌN, CHÈN, CẬP NHẬT và XÓA. Ví dụ: nếu bạn cần lấy địa chỉ email của khách hàng có ID 2001cu (xem Hình 11.1), bạn chỉ cần chạy lệnh SQL sau:

    CHỌN cust_email TỪ khách hàng Ở ĐÂU custjd = "2001cu"

    Mọi thứ khá logic phải không? Tóm lại, lệnh trông như thế này:

    CHỌN tên trường TỪ tên_bảng [điều kiện WHERE]

    Dấu ngoặc vuông cho biết phần cuối cùng của lệnh là tùy chọn. Ví dụ: để lấy địa chỉ email của tất cả khách hàng từ bảng khách hàng, chỉ cần chạy truy vấn sau:

    CHỌN cust_email TỪ khách hàng

    Giả sử bạn muốn thêm một mục mới vào bảng sản phẩm. Lệnh chèn đơn giản nhất trông như thế này:

    CHÈN vào sản phẩm GIÁ TRỊ ("1009pr", "Cà chua đỏ", "1.43");

    Nếu sau này bạn cần xóa dữ liệu này, hãy sử dụng lệnh sau:

    XÓA TỪ các sản phẩm Ở ĐÂU prod_id = 1009r";

    Có nhiều loại lệnh SQL và mô tả đầy đủ về chúng nằm ngoài phạm vi của cuốn sách này. Một cuốn sách riêng biệt có thể dễ dàng được viết về chủ đề này! Tôi đã cố gắng giữ các lệnh SQL được sử dụng trong các ví dụ tương đối đơn giản nhưng đủ thực tế. Có rất nhiều thông tin và tài nguyên đào tạo SQL trên Web. Một số liên kết được cung cấp ở cuối phần này.

    Không cần thiết phải viết lệnh SQL bằng ký tự chữ hoa. Tuy nhiên, tôi thích ký hiệu này hơn vì nó giúp phân biệt các thành phần của yêu cầu.

    Vì bạn đang đọc cuốn sách này nên có lẽ bạn đang thắc mắc làm thế nào để làm việc với cơ sở dữ liệu trên Web? Theo nguyên tắc, trước tiên, sử dụng một số

    hoặc ngôn ngữ giao diện (PHP, Java hoặc Perl), một kết nối tới cơ sở dữ liệu sẽ được tạo, sau đó chương trình truy cập cơ sở dữ liệu bằng các truy vấn bằng cách sử dụng một bộ công cụ tiêu chuẩn. Ngôn ngữ giao diện có thể được coi như một loại “keo” gắn kết cơ sở dữ liệu với Web. Tôi chuyển sang ngôn ngữ front-end yêu thích của tôi - PHP.

    Tài nguyên bổ sung

    Dưới đây là một số tài nguyên trực tuyến liên quan đến SQL. Chúng sẽ hữu ích cho cả người mới bắt đầu và lập trình viên có kinh nghiệm.

    • Hướng dẫn về SQL: http://perl.about.com/compute/perl/cs/beginningsql/index.htm.
    • SQLCourse.com (với cơ sở dữ liệu mẫu): http://www.sqlcourse.com.
    • SQL dành cho Web Geeks: http://www.arsdigita.com/books/sql.
    • Giới thiệu về SQL (như được áp dụng cho MySQL): http://www.devshed.com/Server_side/MySQL/Intro.

    Hỗ trợ cơ sở dữ liệu trong PHP

    Nếu tôi được yêu cầu kể tên khía cạnh quan trọng nhất của PHP, có lẽ tôi sẽ nói là hỗ trợ cơ sở dữ liệu. PHP cung cấp hỗ trợ rộng rãi cho hầu hết mọi máy chủ cơ sở dữ liệu hiện có, bao gồm:

    PostgreSQL
    Chất rắn
    Sybase
    UNIX dbm

    File-Pro (chỉ đọc)

    Velods

    Oracle (OCI7 và OC18)

    Như danh sách này cho thấy, khả năng hỗ trợ cơ sở dữ liệu của PHP bao gồm từ khả năng tương thích với cơ sở dữ liệu mà mọi người đều biết (như Oracle) cho đến những cơ sở dữ liệu mà nhiều người thậm chí chưa từng nghe đến. Ý nghĩa của câu chuyện - nếu bạn định sử dụng một DBMS nghiêm túc để lưu trữ thông tin được phân phối trên Web, rất có thể cơ sở dữ liệu này được hỗ trợ bằng PHP. Hỗ trợ cơ sở dữ liệu trong PHP được thể hiện bằng một tập hợp các hàm tiêu chuẩn để kết nối với cơ sở dữ liệu, xử lý các yêu cầu và ngắt kết nối.

    Mô tả chi tiết về tất cả các cơ sở dữ liệu được hỗ trợ rõ ràng nằm ngoài phạm vi của cuốn sách này. Tuy nhiên, máy chủ MySQL đưa ra ý tưởng hay về khả năng chung của việc hỗ trợ cơ sở dữ liệu trong PHP. Vì lý do này, các ví dụ trong phần còn lại của cuốn sách này và tất cả các chương khác của cuốn sách sẽ sử dụng cú pháp MySQL. Bất kể bạn làm việc với máy chủ cơ sở dữ liệu nào, việc điều chỉnh các ví dụ sẽ không gây ra nhiều khó khăn.

    Cài đặt

    Một trong những lý do khiến MySQL rất phổ biến đối với người dùng PHP là do PHP tự động hỗ trợ máy chủ. Vì vậy, bạn chỉ cần đảm bảo rằng gói MySQL được cài đặt chính xác. MySQL DBMS tương thích với hầu hết mọi hệ điều hành chính, bao gồm FreeBSD, Solaris, UNIX, Linux và các phiên bản Windows khác nhau. Mặc dù chính sách cấp phép của MySQL linh hoạt hơn các máy chủ cơ sở dữ liệu khác nhưng tôi thực sự khuyên bạn nên xem lại thông tin cấp phép được đăng trên trang web MySQL (http://www.mysql.com).

    Phiên bản mới nhất của MySQL có thể được chấp nhận từ bất kỳ trang nhân bản nào. Danh sách đầy đủ các trang nhân bản có tại http://www.mysql.com/downloads/mirrors.html. Tại thời điểm viết bài, phiên bản ổn định mới nhất của MySQL là 3.22.32 và phiên bản 3.32 đang ở giai đoạn thử nghiệm. Tất nhiên, bạn phải luôn cài đặt phiên bản ổn định mới nhất, đó là lợi ích tốt nhất của bạn. Truy cập trang web nhân bản gần nhất và tải xuống phiên bản phù hợp với hệ điều hành của bạn. Ở đầu trang có các liên kết đến các phiên bản mới cho nhiều nền tảng khác nhau. Hãy nhớ đọc toàn bộ trang vì nó kết thúc bằng một số liên kết cụ thể của hệ điều hành.

    Nhóm phát triển MySQL đã chuẩn bị tài liệu chi tiết mô tả quá trình cài đặt. Tôi khuyên bạn nên xem xét cẩn thận tất cả các khía cạnh chung của quá trình cài đặt, không giới hạn bản thân ở những thông tin cụ thể cho hệ điều hành của bạn.

    Thiết lập MySQL

    Sau khi cài đặt thành công, máy chủ MySQL cần được cấu hình. Quá trình thiết lập chủ yếu bao gồm việc tạo cơ sở dữ liệu mới và chỉnh sửa những cái bàn đặc quyền MySQL. Bảng đặc quyền kiểm soát quyền truy cập vào cơ sở dữ liệu MySQL. Thiết lập bảng thích hợp là cực kỳ quan trọng đối với tính bảo mật của cơ sở dữ liệu của bạn, vì vậy bạn phải hoàn toàn làm quen với hệ thống đặc quyền trước khi khởi chạy trang web của mình trong sản xuất.

    Thoạt nhìn, các bảng đặc quyền của MySQL trông có vẻ đáng sợ, nhưng một khi bạn hiểu đúng về chúng, việc bảo trì thêm sẽ trở thành một nhiệm vụ rất đơn giản. Một mô tả đầy đủ về các bảng đặc quyền nằm ngoài phạm vi của cuốn sách này. Tuy nhiên, có rất nhiều tài nguyên trên Web được thiết kế để trợ giúp những người mới sử dụng MySQL. Để biết thêm thông tin, hãy truy cập trang web MySQL (http://www.mysql.com).

    Sau khi cài đặt và cấu hình thành công gói MySQL, bạn có thể bắt đầu thử nghiệm cơ sở dữ liệu trên Web! Phần tiếp theo được dành cho chủ đề này. Hãy bắt đầu bằng việc tìm hiểu về hỗ trợ MySQL trong PHP.

    Các hàm PHP tiêu chuẩn để làm việc với MySQL

    Như vậy, bạn đã tạo và kiểm tra thành công tất cả các quyền cần thiết; mọi thứ đã sẵn sàng để hoạt động với máy chủ MySQL. Trong phần này, tôi sẽ giới thiệu các hàm PHP tiêu chuẩn mà bạn có thể sử dụng để dễ dàng giao tiếp giữa các tập lệnh PHP và máy chủ MySQL. Trình tự hành động chung khi tương tác với máy chủ MySQL trông như thế này:

    1. Thiết lập kết nối đến máy chủ MySQL. Nếu nỗ lực không thành công, hãy hiển thị thông báo tương ứng và kết thúc quá trình.
    2. Chọn cơ sở dữ liệu máy chủ MySQL. Nếu nỗ lực lựa chọn không thành công, hãy hiển thị thông báo tương ứng và kết thúc quá trình. Có thể mở đồng thời nhiều cơ sở dữ liệu để xử lý các truy vấn.
    3. Xử lý các yêu cầu tới cơ sở dữ liệu (hoặc cơ sở dữ liệu) đã chọn.
    4. Sau khi xử lý truy vấn hoàn tất, hãy đóng kết nối với máy chủ cơ sở dữ liệu.

    Các ví dụ trong phần này sử dụng các bảng sản phẩm, khách hàng và đơn hàng (xem Hình 11.1). Nếu bạn muốn tự mình kiểm tra tất cả các ví dụ, hãy tạo các bảng này hoặc sao chép trang cấu trúc để bạn không phải lật giở sách liên tục.

    Vì vậy, hãy bắt đầu lại từ đầu - nghĩa là bằng cách kết nối với máy chủ MySQL.

    Hàm mysql_connect() thiết lập kết nối với máy chủ MySQL. Sau khi kết nối thành công với MySQL, bạn có thể tiến hành chọn cơ sở dữ liệu do máy chủ này cung cấp. Cú pháp hàm Mysql_connect():

    int mysql_connect ( [:/path//to/socket] [, tên người dùng chuỗi] [, mật khẩu chuỗi])

    Tham số máy chủ chứa tên của máy chủ được chỉ định trong bảng đặc quyền máy chủ MySQL. Tất nhiên, nó cũng được sử dụng để chuyển hướng các yêu cầu đến máy chủ web chạy MySQL, vì máy chủ MySQL có thể được kết nối từ xa với máy chủ MySQL. Cùng với tên máy chủ, các tham số tùy chọn có thể được chỉ định - số cổng cũng như đường dẫn đến ổ cắm (đối với máy chủ cục bộ). Các tham số tên người dùng và mật khẩu phải khớp với tên người dùng và mật khẩu được chỉ định trong bảng đặc quyền MySQL. Lưu ý rằng tất cả các tham số đều là tùy chọn vì bảng đặc quyền có thể được cấu hình để cho phép kết nối mà không cần xác minh. Nếu máy chủ không được chỉ định, mysql_connect() sẽ cố gắng kết nối với máy chủ cục bộ.

    Ví dụ về mở kết nối tới MySQL:

    @mysql_connect("máy chủ cục bộ", "web", "4tf9zzzf")

    Trong ví dụ này, localhost là tên máy tính, web là tên người dùng và 4tf9zzzf là mật khẩu. Dấu @ trước khi gọi mysql_connect() sẽ ngăn chặn bất kỳ thông báo lỗi nào được tạo ra khi cố gắng kết nối không thành công; chúng được thay thế bằng thông báo được chỉ định khi gọi die(). Lưu ý rằng giá trị được trả về bởi rnysql_connect() không được sử dụng trong ví dụ này. Nếu chương trình chỉ sử dụng một kết nối đến máy chủ MySQL thì điều này khá bình thường. Nhưng nếu chương trình thiết lập kết nối tới nhiều máy chủ MySQL trên các máy chủ khác nhau, bạn nên lưu trữ ID kết nối được trả về bởi lệnh gọi mysql_connect() để các lệnh tiếp theo có thể được chuyển hướng đến đúng máy chủ MySQL. Ví dụ:

    $link1 = @mysql_connect("www.somehost.com", "web", "abcde") hoặc die("Không thể kết nối với

    Máy chủ MySQL!");

    $linkl = @mysql_connect("www.someotherhost.com", "usr", "secret") hoặc die("Không thể kết nối

    tới máy chủ MySQL!");

    Các mã định danh $link1 và $link2 được chuyển vào các truy vấn tiếp theo tới cơ sở dữ liệu. Bạn sẽ sớm tìm hiểu chính xác cách gửi yêu cầu đến đúng máy chủ bằng ID kết nối.

    Hàm mysql_pconnect() cung cấp hỗ trợ cho các kết nối liên tục. Trong môi trường nhiều người dùng, nên sử dụng mysql_pconnect() thay vì mysql_connect() để tiết kiệm tài nguyên hệ thống. Các loại tham số và giá trị trả về của hàm mysql_pconnect() hoàn toàn giống nhau c mysql_connect().

    mysql_select_db()

    Sau khi kết nối thành công với MySQL, bạn cần chọn cơ sở dữ liệu nằm trên máy chủ. Hàm mysql_select_db() được sử dụng cho việc này. Cú pháp hàm Mysql_select_db():

    int mysql_select_db (sợi dây tên cơ sở dữ liệu [, int kết nối_nhận dạng])

    Tham số cơ sở dữ liệu_name xác định cơ sở dữ liệu đã chọn, mã định danh

    được trả về bởi hàm mysql_select_db(). Xin lưu ý: tham số

    Connection_identifier chỉ là tùy chọn khi có một kết nối mở với

    Máy chủ MySQL. Nếu có nhiều kết nối mở, tùy chọn này

    phải được chỉ định. Một ví dụ về việc chọn cơ sở dữ liệu bằng hàm mysql_select_db():

    or die("Không thể kết nối với máy chủ MySQL!");

    Nếu chỉ có một cơ sở dữ liệu được chọn trong chương trình thì không cần thiết phải lưu mã định danh của nó. Tuy nhiên, nếu bạn chọn nhiều cơ sở dữ liệu, ID trả về sẽ được giữ nguyên để bạn có thể tham chiếu cơ sở dữ liệu chính xác khi xử lý yêu cầu. Nếu không có ID nào được chỉ định, cơ sở dữ liệu được chọn cuối cùng sẽ được sử dụng.

    Sau khi làm việc xong với máy chủ MySQL, kết nối phải được đóng lại. Hàm mysql_close() đóng kết nối được chỉ định bởi tham số tùy chọn. Nếu không được chỉ định, hàm mysql_close() sẽ đóng kết nối mở cuối cùng. Cú pháp hàm Mysql_close():

    int mysql_close()

    Ví dụ sử dụng mysql_close():

    @mysql_connect("localhost", "web", "4tf9zzzf")

    or die("Không thể kết nối với máy chủ MySQL!");

    @mysql_select_db("công ty") hoặc die("Không thể chọn cơ sở dữ liệu công ty!"); print "Bạn đã kết nối với cơ sở dữ liệu MySQL!";

    Trong ví dụ này, không cần chỉ định ID kết nối vì chỉ có một kết nối mở tới máy chủ tại thời điểm mysql_close() được gọi.

    Các kết nối được mở bởi mysql_pconnect() không cần phải đóng.

    Hàm mysql_query() cung cấp giao diện để truy vấn cơ sở dữ liệu

    dữ liệu. Cú pháp hàm Mysql_query():

    int mysql_query (truy vấn chuỗi [, int Connection_identifier])

    Tham số truy vấn chứa văn bản của truy vấn trong SQL. Yêu cầu được gửi đến kết nối được xác định bởi tham số Connection_identifier tùy chọn hoặc, nếu không có tham số, đến kết nối mở cuối cùng.

    Những lập trình viên thiếu kinh nghiệm thường lầm tưởng rằng hàm mysql_query() trả về kết quả xử lý truy vấn. Điều này không đúng - tùy thuộc vào loại truy vấn, việc gọi mysql_query() có thể gây ra những hậu quả khác nhau. Khi lệnh SQL SELECT được thực thi thành công, mã định danh kết quả sẽ được trả về, sau đó được chuyển đến hàm mysql_result() để định dạng và hiển thị kết quả truy vấn tiếp theo. Nếu việc xử lý yêu cầu không thành công, hàm sẽ trả về FALSE. Hàm mysql_result() được mô tả ở một trong các phần sau. Số lượng bản ghi tham gia truy vấn được xác định bằng hàm mysql_num_rows(). Chức năng này cũng được mô tả dưới đây.

    Như đã nói, tôi sẽ chỉ đưa ra các ví dụ về cách sử dụng mysql_query() sau khi mô tả các hàm mysql_result() và mysql_affected_rows().

    Nếu bạn lo ngại rằng các truy vấn đang sử dụng quá nhiều bộ nhớ, hãy gọi hàm PHP tiêu chuẩn mysql_free_result. Khi được gọi, nó sẽ chuyển ID kết quả được trả về bởi mysql_query(). Hàm mysql_free_result() giải phóng tất cả bộ nhớ được liên kết với một truy vấn nhất định.

    mysqLaff ected_rows()

    Trong nhiều trường hợp, bạn muốn biết số lượng bản ghi liên quan đến truy vấn SQL bằng lệnh INSERT, UPDATE, REPLACE hoặc DELETE. Vấn đề được giải quyết bằng hàm mysql_affected_rows(). Cú pháp hàm:

    int mysql_affected_rows()

    Xin lưu ý: tham số Connection_id là tùy chọn. Nếu không được chỉ định, mysql_affected_rqws() sẽ cố gắng sử dụng kết nối mở cuối cùng. Ví dụ:

    // Kết nối với máy chủ và chọn cơ sở dữ liệu

    @mysql_connect("localhost", "web". "4tf9zzzf")

    or die("Không thể kết nối với máy chủ MySQL!");

    @mysql_select_db("công ty") hoặc die("Không thể chọn cơ sở dữ liệu công ty!");

    // Tạo một yêu cầu

    $query = "CẬP NHẬT sản phẩm SET prod_name = \"dưa đỏ\"

    Ở ĐÂU prod_id = \"10001pr\";

    // Thực hiện yêu cầu

    // Xác định số lượng bản ghi được cập nhật

    print "Đã cập nhật tổng số hàng; ".mysql_affected_rows();

    Chạy đoạn mã này sẽ tạo ra kết quả đầu ra sau:

    Tổng số hàng được cập nhật: 1

    Hàm mysql_affected_rows() không hoạt động với các truy vấn dựa trên lệnh SELECT. Để xác định số lượng bản ghi được trả về từ lệnh gọi SELECT, hãy sử dụng hàm mysql_num_rows(), được mô tả trong phần tiếp theo.

    Trong một tình huống cụ thể, hàm mysql_affected_rows() không thành công. Khi thực thi lệnh DELETE mà không có mệnh đề WHERE, mysql_affected_rows() luôn trả về 0.

    mysql_num_rows()

    Hàm mysql_num_rows() xác định số hàng được trả về bởi lệnh SELECT. Cú pháp hàm Mysql_num_rows():

    int mysql_num_rows(kết quả int)

    Ví dụ về việc sử dụng mysql_num_rows():

    // Kết nối với máy chủ và chọn cơ sở dữ liệu @mysql_connect("localhost", "web", "4tf9zzzf")

    or die("Không thể kết nối với máy chủ MySQL!");

    @mysql_select_db("công ty") hoặc die("Không thể chọn cơ sở dữ liệu công ty!");

    // Chọn tất cả sản phẩm có tên bắt đầu bằng "p"

    $query = "CHỌN prod_name TỪ sản phẩm WHERE prod_name THÍCH \"p*\"";

    print "Tổng số hàng đã chọn: ".mysql_num_rows($result);

    Vì bảng chỉ chứa một sản phẩm có tên bắt đầu bằng chữ p (quả lê) nên chỉ có một bản ghi được trả về. Kết quả:

    Tổng số hàng đã chọn: 1

    Hàm mysql_result() được sử dụng cùng với mysql_query() (khi chạy truy vấn bằng lệnh SELECT) để truy xuất một tập hợp dữ liệu. Cú pháp hàm Mysql_resu1t():

    int mysql_result (int result_identifier, int record [. trường hỗn hợp"]")

    Tham số result_identifier chuyển giá trị được trả về bởi hàm mysql_query(). Tham số bản ghi đề cập đến một bản ghi cụ thể trong tập dữ liệu được xác định bởi tham số result_id. Cuối cùng, trường này có thể được truyền dưới dạng tham số tùy chọn:

    • bù trừ trường bảng;
    • tên trường;
    • tên trường ở định dạng tên_trường_tdblitz_name.

    Liệt kê 11.1 sử dụng cơ sở dữ liệu như trong Hình. 11.1.

    Liệt kê 11.1. Truy xuất và định dạng dữ liệu trong cơ sở dữ liệu MySQL

    @mysql_connect("localhost", "web", "ffttss")

    or die("Không thể kết nối với máy chủ MySQL!");

    @mysql_select_db("công ty")

    // Chọn tất cả bản ghi từ bảng sản phẩm

    $query = "CHỌN * TỪ sản phẩm"; $kết quả = mysql_query($query);

    in "

    \N";

    in "

    \N \N\N";

    trong khi ($x< mysql_numrows($result)) :

    $id = mysql_result($result. $x. "prod_id");

    $name = mysql_result($result, $x, "prod_name");

    $price = mysql_result($result. $x, "prod_price");

    in "

    \N";

    in "

    \N \N \N";

    in "

    \N";

    in "

    ID sản phẩmtên sản phẩmGiá sản phẩm
    $idtên $giá $
    ";

    Kết quả của việc chạy ví dụ này với dữ liệu được hiển thị trong Hình. 11.1, sẽ thu được kết quả sau:

    Liệt kê 11.2. Kết quả của danh sách 11.1

    ID sản phẩmtên sản phẩmGiá sản phẩm

    1000pr

    táo

    1.23

    1001pr

    những quả cam

    2.34

    1002pr

    chuối

    3.45

    1003pr

    4.45

    Hàm mysql_result() rất hữu ích khi làm việc với các tập dữ liệu tương đối nhỏ, nhưng có các hàm khác hoạt động hiệu quả hơn nhiều, đó là các hàm mysql_fetch_row() và mysql_fetch_array(). Những tính năng này được mô tả trong các phần sau.

    mysql_fetch_row()

    Thông thường, sẽ thuận tiện hơn nhiều khi gán ngay giá trị của tất cả các trường của bản ghi cho các phần tử của mảng được lập chỉ mục (bắt đầu từ chỉ mục 0), thay vì gọi mysql_result() nhiều lần để lấy các trường riêng lẻ. Vấn đề được giải quyết bằng hàm mysql_fetch_row(), có cú pháp sau:

    mảng mysql_fetch_row (kết quả int)

    Việc sử dụng hàm list() kết hợp với mysql_fetch_row() sẽ lưu một số lệnh cần thiết khi sử dụng mysql_result(). Liệt kê 11.3 hiển thị mã từ Liệt kê 11.1 được viết lại bằng cách sử dụng list() và mysql_fetch_row().

    Liệt kê 11.3. Tìm nạp dữ liệu bằng hàm mysql_fetch_row()

    @mysql_connect("localhost", "web", "ffttss") hoặc die("Không thể kết nối với máy chủ MySQL!");

    @mysql_select_db("công ty") hoặc die("Không thể chọn cơ sở dữ liệu sản phẩm!");

    $query = "CHỌN * TỪ sản phẩm";

    $kết quả = mysql_query($query);

    in "

    \N";

    in "

    \N \N\N";

    while ($row = mysql_fetch_array($result)) :

    in "

    \N":

    in "

    \N \N \N";

    in "

    \N";

    in "

    ID sản phẩmtên sản phẩm

    Giá sản phẩm

    ".$row["prod_id"]."".$row["prod_name"]."

    " .$row["prod_price"] "
    ";

    Liệt kê 11.3 tạo ra kết quả tương tự như Liệt kê 11.1, nhưng sử dụng ít lệnh hơn.

    sq l_f etch_array() của tôi

    Hàm mysql_fetch_array() tương tự như mysql_fetch_row() tuy nhiên mặc định giá trị trường bản ghi được lưu trữ trong liên tưởng mảng. Tuy nhiên, bạn có thể chọn kiểu lập chỉ mục (kết hợp, số hoặc kết hợp). Cú pháp hàm Mysql_fetch_array():

    mảng mysql_fetch_array (định danh kết quả int [, indexing_type])

    Tham số result_identifier chuyển giá trị được trả về bởi hàm mysql_query(). Tham số indexing_type tùy chọn nhận một trong các giá trị sau:

    • MYSQL_ASSOC -- hàm mysql_fetch_array() trả về một mảng kết hợp. Nếu không được chỉ định, giá trị này sẽ được sử dụng làm giá trị mặc định;
    • MYSQL_NUM -- hàm mysql_fetch_array() trả về một mảng được lập chỉ mục bằng số;
    • MYSQL_BOTH -- Các trường của bản ghi trả về có thể được truy cập bằng chỉ mục số hoặc chỉ mục kết hợp.

    Liệt kê 11.4 chứa một phiên bản mã khác từ Danh sách 11.1 và 11.3. Lần này, hàm mysql_fetch_array() được sử dụng để trả về một mảng trường kết hợp.

    Liệt kê 11.4. Tìm nạp dữ liệu bằng hàm mysql_fetch_array()

    @mysql_connect("máy chủ cục bộ", "web", "ffttss")

    or die("Không thể kết nối với máy chủ MySQL!");

    @mysql_select_db("công ty")

    or die("Không thể chọn cơ sở dữ liệu sản phẩm!");

    $query = "CHỌN * TỪ sản phẩm";

    $kết quả = mysql_query($query);

    "

    \N";

    in "

    \N \N\N";

    in "

    \N";

    in "

    \N \N \N" ;

    in "

    \N";

    in "

    ID sản phẩmtên sản phẩm Giá sản phẩm
    ".$row["prod_id"]."".$row["prod_name"]."" . $row["prod_price"] . "
    ";

    Liệt kê 11.4 tạo ra kết quả tương tự như Liệt kê 11.1 và 11.3.

    Những gì bạn biết bây giờ về chức năng của MySQL trong PHP là đủ để bắt đầu tạo một số ứng dụng khá thú vị. Ứng dụng đầu tiên chúng ta xem xét là một công cụ tìm kiếm đơn giản. Ví dụ này minh họa cách sử dụng các biểu mẫu HTML (xem chương trước) để lấy dữ liệu mà sau này được sử dụng để lấy thông tin từ cơ sở dữ liệu.

    Một ví dụ về một công cụ tìm kiếm đơn giản trong PHP

    Tất cả chúng ta đều đã phải sử dụng các công cụ tìm kiếm trên Web nhiều lần, nhưng những hệ thống đó hoạt động như thế nào? Công cụ tìm kiếm đơn giản nhất chấp nhận ít nhất một từ khóa. Từ này được bao gồm trong truy vấn SQL, sau đó được sử dụng để lấy thông tin từ cơ sở dữ liệu. Kết quả tìm kiếm được công cụ tìm kiếm định dạng theo tiêu chí này hoặc tiêu chí khác (ví dụ: theo danh mục hoặc mức độ phù hợp).

    Công cụ tìm kiếm hiển thị trong Liệt kê 11.5 được thiết kế để tìm kiếm thông tin khách hàng. Trong biểu mẫu, người dùng nhập từ khóa và chọn danh mục (tên khách hàng, ID hoặc địa chỉ email) để tìm kiếm. Nếu tên, ID hoặc địa chỉ do người dùng nhập tồn tại, công cụ tìm kiếm sẽ truy xuất các thuộc tính còn lại từ cơ sở dữ liệu. Sau đó, sử dụng ID khách hàng từ bảng đơn hàng, chọn

    Lịch sử các đơn đặt hàng. Tất cả các đơn đặt hàng của khách hàng này được hiển thị theo thứ tự số lượng giảm dần. Nếu từ khóa được chỉ định không xuất hiện trong danh mục do người dùng chỉ định, quá trình tìm kiếm sẽ dừng lại, chương trình sẽ hiển thị thông báo tương ứng và hiển thị lại biểu mẫu.

    Liệt kê 11.5. Công cụ tìm kiếm đơn giản nhất (searchengine.php)

    "

    từ khóa:


    Trọng tâm tìm kiếm:


    ,

    // Nếu form chưa được hiển thị thì hiển thị nó

    if (Sseenform != "y") :

    in biểu mẫu $; khác:

    @mysql_connect("localhost", "web", "ffttss")

    or die("Không thể kết nối với máy chủ MySQL!");

    @mysql_select_db("công ty")

    // Xây dựng và thực hiện truy vấn

    $query = "CHỌN cust_id. cust_name, cust_email

    TỪ khách hàng Ở ĐÂU $category = "$keyword"";

    $kết quả = mysql_query($query);

    // Nếu không tìm thấy kết quả phù hợp, hiển thị thông báo

    // và hiển thị lại biểu mẫu

    if (mysql_num_rows($result) == 0) :

    print "Xin lỗi, nhưng không tìm thấy kết quả nào. Vui lòng thử tìm kiếm lại:";

    // Kết quả phù hợp được tìm thấy. Định dạng và hiển thị kết quả, nếu không:

    // Định dạng và hiển thị giá trị trường.

    list($id, $name, $email) = mysql_fetch_row($result);

    in "

    Thông tin khách hàng:

    ";

    in " Tên: tên $
    ";

    in " Nhận biết #:$id
    ";

    in " E-mail: email $
    ";

    in "

    Lịch sử đơn hàng:

    ";

    // Xây dựng và thực hiện truy vấn đối với bảng "orders"

    $query = "CHỌN đơn hàng, prod_id, số lượng

    TỪ đơn hàng WHERE cust_id = "$id"

    ĐẶT HÀNG THEO số lượng DESC";

    $kết quả = mysql_query($query):

    in "

    ";

    in "

    ";

    // Định dạng và hiển thị các bản ghi tìm được.

    while (list($order_id, $prod_id, $quantity) = mysql_fetch_row($result));

    in "

    ";

    in "

    ";

    in "

    ";

    in "

    ID thứ 0ID sản phẩmSố lượng
    $order_id$prod_idsố lượng $
    ";

    Nếu bạn nhập từ khóa Mi 1 apo và chọn danh mục Tên khách hàng từ danh sách thả xuống, chương trình hiển thị thông tin sau:

    Thông tin khách hàng:

    Tên: Milano

    Nhận biết#: 2000cu

    E-mail: [email được bảo vệ]

    Id đơn hàng ID sản phẩm Số lượng
    100003 1000pr 12
    100005 1002pr 11

    Tất nhiên, chúng tôi đã xem xét cách triển khai đơn giản nhất của công cụ tìm kiếm. Có nhiều tùy chọn bổ sung - tìm kiếm nhiều từ khóa, tìm kiếm từ khóa không đầy đủ hoặc tự động chọn các bài đăng có từ khóa tương tự. Hãy thử sử dụng trí tưởng tượng sáng tạo của bạn và tự mình thực hiện chúng.

    Sắp xếp bảng

    Khi xuất dữ liệu từ cơ sở dữ liệu, cần cung cấp khả năng sắp xếp dữ liệu theo nhiều tiêu chí khác nhau. Ví dụ: hãy xem kết quả được hiển thị bởi công cụ tìm kiếm của chúng tôi - đặc biệt chú ý đến những điều sau sau tiêu đề Lịch sử đơn hàng: (Lịch sử đơn hàng). Giả sử danh sách rất dài và bạn muốn sắp xếp dữ liệu theo ID sản phẩm (hoặc ID đơn hàng). Để hiểu rõ hơn những gì chúng ta đang nói đến, tôi khuyên bạn nên truy cập một trong những trang web yêu thích của tôi, http://download.cnet.com. Khi xem các chương trình trong một danh mục cụ thể, nếu bạn nhấp vào tiêu đề cột (tiêu đề, ngày đăng, số lượt tải xuống hoặc kích thước tệp), danh sách sẽ tự động được sắp xếp theo nội dung của cột được chỉ định. Phần sau đây trình bày cách triển khai tính năng này.

    Trong Liệt kê 11.6, chúng ta lấy dữ liệu từ bảng đơn hàng. Theo mặc định, dữ liệu được sắp xếp theo thứ tự giảm dần theo khối lượng đơn hàng (trường số lượng). Tuy nhiên, việc nhấp vào bất kỳ tiêu đề bảng nào sẽ khiến trang tải lại với bảng được sắp xếp theo cột được chỉ định.

    Liệt kê 11.6. Sắp xếp bảng (tablesorter.php)

    // Kết nối với máy chủ MySQL và chọn cơ sở dữ liệu

    @mysql_connect("localhost". "web", "ffttss")

    or die("Không thể kết nối với máy chủ MySQL!");

    @mysql_select_db("công ty")

    or die("Không thể chọn cơ sở dữ liệu công ty!");

    // Nếu giá trị của biến $key không được đặt thì giá trị mặc định

    // giá trị "quantity" được sử dụng nếu (! isset($key)) :

    $key = "số lượng"; cuối cùng;

    // Tạo và thực hiện một yêu cầu.

    // Dữ liệu đã chọn được sắp xếp giảm dần theo cột $key

    $query = "CHỌN order_id, cust_id, prod_id, số lượng TỪ đơn hàng ĐẶT HÀNG THEO $key DESC" $result = mysql_query($query);

    // Tạo tiêu đề bảng

    in "

    ";

    in "

    ";

    // Định dạng và hiển thị từng hàng của bảng

    trong khi (danh sách($order_id,$cust_id,$prod_id, $quantity)

    Mysql_fetch_row($result)) :

    in "

    ";

    in "

    ";

    in "

    ";

    // Kết thúc bảng

    in "

    ID đơn hàng ID khách hàng ID sản phẩm Số lượng

    $order_id$cust_id$prod_id

    số lượng $

    ";

    Đối với cơ sở dữ liệu công ty được hiển thị trong Hình. 11.1, đầu ra tiêu chuẩn của Liệt kê 11.6 trông như thế này:

    ID đơn hàng ID khách hàng ID sản phẩm Số lượng
    2000cu 1000pr 12
    2000cu 1002pr 11
    2000cu 1000pr 9
    2000cu 1001pr 5
    2000cu 1002pr 3

    Xin lưu ý: tiêu đề bảng là siêu liên kết. Vì việc sắp xếp mặc định là theo trường số lượng nên các bản ghi được sắp xếp theo thứ tự giảm dần của cột cuối cùng. Nếu bạn nhấp vào liên kết Order_ID, trang sẽ tải lại nhưng lần này các mục được sắp xếp theo thứ tự giảm dần theo ID đơn hàng. Bảng sẽ trông như thế này:

    ID đơn hàng ID khách hàng ID sản phẩm Số lượng
    2000cu 1002pr 11
    2000cu 1000pr 9
    2000cu 1000pr 12
    2000cu 1001pr 5
    2000cu 1002pr 3

    Việc sắp xếp đầu ra mang lại lợi ích lớn khi định dạng cơ sở dữ liệu. Một sửa đổi đơn giản của truy vấn SELECT cho phép bạn sắp xếp dữ liệu theo bất kỳ tiêu chí nào - tăng dần, giảm dần hoặc nhóm các bản ghi.

    Điều này kết thúc việc làm quen của chúng tôi với MySQL. Xin lưu ý rằng chương này không cung cấp hết mọi thứ bạn cần biết về MySQL. Để biết danh sách đầy đủ các lệnh MySQL trong PHP, hãy xem tài liệu (http://www.php.net/manuat).

    ODBC

    Các hàm chuyên dụng rất phù hợp để làm việc với một loại DBMS cụ thể. Nhưng nếu bạn phải kết nối với MySQL, Microsoft SQL Server và IBM DB2, tất cả trong một ứng dụng thì sao? Một vấn đề tương tự nảy sinh khi phát triển các ứng dụng không phụ thuộc vào DBMS; các ứng dụng như vậy hoạt động “trên” cơ sở hạ tầng cơ sở dữ liệu khách hàng hiện có. ODBC (viết tắt của Kết nối cơ sở dữ liệu mở) là giao diện chương trình ứng dụng (API) cho phép bạn sử dụng một tập hợp hàm trừu tượng chung để làm việc với các loại cơ sở dữ liệu khác nhau. Ưu điểm của phương pháp này rất rõ ràng - bạn không cần phải viết lại cùng một đoạn mã nhiều lần chỉ để thực hiện các thao tác giống nhau trên các loại cơ sở dữ liệu khác nhau.

    Chỉ có thể làm việc với máy chủ cơ sở dữ liệu qua ODBC nếu máy chủ này tương thích với ODBC. Nói cách khác, phải có trình điều khiển ODBC cho nó. Để biết thêm thông tin về trình điều khiển ODBC, hãy xem tài liệu DBMS. Bạn có thể phải tải chúng xuống thêm từ Internet và cài đặt chúng trên máy tính của mình. Mặc dù ODBC do Microsoft phát triển đã trở thành một tiêu chuẩn mở nhưng nó chủ yếu được sử dụng để làm việc với các hệ thống quản lý cơ sở dữ liệu trên nền tảng Windows; tuy nhiên, trình điều khiển ODBC cũng tồn tại trên nền tảng Linux. Dưới đây là các liên kết đến trình điều khiển cho một số DBMS phổ biến.

    • Trình điều khiển cơ sở dữ liệu cho Windows 95/98/NT: http://www.microsoft.com/data/odbc
    • Công nghệ tự động hóa: http://www.odbcsdk.com
    • Easysoft: http://www.easysoft.com/products/oob/main.phtml
    • Trình điều khiển ODBC cho MySQL (MyODBC): http://www.mysql.com
    • Phần mềm OpenLink: http://www.openlinksw.com

    Trình điều khiển ODBC khác nhau về mục đích, nền tảng và mục đích. Vui lòng tham khảo tài liệu dành cho các gói cụ thể để biết thông tin về các khía cạnh khác nhau khi làm việc với các trình điều khiển này. Tuy nhiên, bất chấp tất cả những khác biệt, việc sử dụng các trình điều khiển này trong PHP không có vấn đề gì.

    Khi bạn đã xác định được bộ trình điều khiển ODBC nào phù hợp nhất với nhu cầu của mình, hãy tải xuống và làm theo tất cả các hướng dẫn cài đặt và cấu hình. Sau này, bạn có thể chuyển sang phần tiếp theo - “Hỗ trợ ODBC trong PHP”.

    Hỗ trợ ODBC trong PHP

    Hàm ODBC trong PHP, thường được gọi là các hàm ODBC chung, không chỉ cung cấp hỗ trợ ODBC tiêu chuẩn mà còn cho phép bạn làm việc với một số DBMS có API riêng thông qua API ODBC tiêu chuẩn. Cái sau bao gồm các DBMS sau:

    • Adabas D;
    • IODBC;
    • IBM DB2;
    • Chất rắn;
    • Sybase SQL ở mọi nơi.

    Xin lưu ý: khi làm việc với các DBMS được liệt kê, cơ chế ODBC tiêu chuẩn không thực sự được sử dụng. Chỉ là các hàm ODBC phổ biến được hỗ trợ trong PHP được sử dụng để tương tác với cơ sở dữ liệu. Điều này thuận tiện vì nếu bạn chuyển sang một DBMS tương thích với ODBC khác (hoặc một DBMS từ danh sách trên), tất cả các tập lệnh của bạn sẽ hoạt động tốt.

    Hỗ trợ ODBC được tích hợp sẵn trong bản phân phối PHP, do đó, với một số ít trường hợp ngoại lệ, bạn sẽ phải thực hiện rất ít hoặc không cần cấu hình đặc biệt.

    Hiện tại có khoảng 40 hàm ODBC phổ biến. Tuy nhiên, để lấy thông tin từ cơ sở dữ liệu tương thích với ODBC, một số chức năng được mô tả dưới đây là khá đủ. Để biết danh sách đầy đủ các hàm ODBC phổ biến trong PHP, hãy xem tài liệu (http://www.php.net/manual).

    Trước khi có thể truy vấn cơ sở dữ liệu tương thích với ODBC, trước tiên bạn phải thiết lập kết nối với nó. Kết nối được tạo bởi hàm ocbc_connect(). Cú pháp của hàm odbc_connect():

    int odbc_connect (nguồn dữ liệu chuỗi, tên người dùng chuỗi, mật khẩu chuỗi [, loại con trỏ int])

    Tham số data_source chỉ định cơ sở dữ liệu tương thích với ODBC mà bạn đang cố gắng liên lạc. Các tham số tên người dùng và mật khẩu, như bạn có thể đoán, chứa tên người dùng và mật khẩu cần thiết để kết nối với nguồn dữ liệu. Tham số Cursor_type tùy chọn nhằm giúp khắc phục sự cố gặp phải với một số trình điều khiển ODBC. Tham số này có thể nhận một trong bốn giá trị có thể:

    • SQL_CUR_USE_IF_NEEDED;
    • SQL_CURSOR_USE_ODBC;
    • SQL_CUR_USE_DRIVER;
    • MẶC ĐỊNH HIỆN TẠI SQL.

    Bạn có thể không cần sử dụng tùy chọn này, nhưng đây vẫn là điều cần lưu ý trong trường hợp gói ODBC của bạn không xử lý được một yêu cầu cụ thể.

    Sử dụng odbc_connect() trong một chương trình thật dễ dàng. Ví dụ:

    Chức năng này được sử dụng để mở các kết nối liên tục đến cơ sở dữ liệu. Nó tiết kiệm tài nguyên hệ thống vì odbc_pconnect() kiểm tra xem liệu kết nối đã cho đã được mở chưa và nếu có thì sẽ sử dụng kết nối trước đó.

    Sau khi bạn làm việc xong với cơ sở dữ liệu tương thích với ODBC, kết nối phải được đóng để giải phóng mọi tài nguyên được kết nối mở sử dụng. Kết nối được đóng bằng hàm odbc_close():

    void odbc_close()

    Tham số Connection_identifier chứa mã định danh của kết nối đang mở. Hãy xem một ví dụ nhỏ:

    obdc_connect("myAccessDB", "người dùng", "bí mật")

    hoặc die("Không thể kết nối với cơ sở dữ liệu ODBC");

    print "Hiện đang kết nối với cơ sở dữ liệu ODBC!"; odbc_close ($ kết nối);

    Trước khi xử lý trực tiếp, yêu cầu phải được “chuẩn bị”. Vấn đề được giải quyết bằng hàm odbc_prepare():

    int odbc_prepare (int Connection_identifier, yêu cầu chuỗi)

    Tham số Connection_id chuyển mã định danh kết nối được trả về bởi hàm odbc_connect(). Tham số yêu cầu chứa văn bản của yêu cầu phải được máy chủ thực thi. Nếu yêu cầu không thể được thực hiện, hàm sẽ trả về FALSE; nếu không, mã định danh kết quả sẽ được trả về, mã này sau đó sẽ được sử dụng khi gọi hàm odbc_execute() (xem bên dưới).

    Truy vấn do hàm odbc_prepare() chuẩn bị được thực thi bởi hàm odbc_execute(). Cú pháp của hàm odbc_execute():

    int odbc_execute (định danh kết quả int [, tham số mảng])

    Tham số result_id chỉ định mã định danh kết quả được trả về khi gọi thành công tới odbc_prepare(). Một tham số tùy chọn chỉ được truyền nếu dữ liệu bổ sung được truyền khi gọi hàm.

    Hãy xem xét ví dụ sau:

    $connect = @obdc_connect("myAccessDB", "người dùng", "bí mật")

    hoặc die("Không thể kết nối với cơ sở dữ liệu ODBC");

    $query = "CẬP NHẬT khách hàng SET cust_id = \"Milano, Inc.\"

    Ở ĐÂU cust_id \"2000cu\"";

    $result = odbc_prepare($connect, $query) or die("Không thể" chuẩn bị truy vấn!");

    $result = odbc_execute($result) hoặc die("Không thể" thực hiện truy vấn!");

    odbc_close ($ kết nối);

    Ví dụ bên dưới minh họa giao dịch ODBC trong đó dữ liệu truy vấn không được hiển thị trong trình duyệt (như thường được thực hiện bằng lệnh SELECT). Giao dịch ODBC sử dụng truy vấn QUERY được mô tả bên dưới trong phần "odbc_result_all()".

    Hàm odbc_exec() kết hợp odbc_prepare() và odbc_execute(). Cú pháp của hàm odbc_exec():

    int odbc_exec (int Connection_identifier, yêu cầu chuỗi)

    Tham số Connection_id chuyển mã định danh kết nối được trả về bởi hàm odbc_connect(). Tham số yêu cầu chứa văn bản của yêu cầu phải được máy chủ thực thi. Nếu yêu cầu không thể được thực hiện, hàm sẽ trả về FALSE; mặt khác, mã định danh kết quả sẽ được trả về, mã này được sử dụng trong các lệnh gọi hàm tiếp theo:

    obdc_connect("myAccessDB", "người dùng", "bí mật")

    hoặc die("Không thể kết nối với cơ sở dữ liệu ODBC");

    odbc_close ($ kết nối) ;

    Trong ví dụ này, hàm odbc_exec() cố gắng thực thi một truy vấn có văn bản được chứa trong biến $query. Nếu thành công, biến $result sẽ được gán định danh kết quả; nếu thất bại, nó được đặt thành FALSE và thông báo được truyền khi gọi die() sẽ được in.

    odbc_result_all()

    Hàm odbc_result_all() rất tiện dụng định dạng và hiển thị tất cả các mục nhập cho id kết quả được tạo ra bởi lệnh gọi tới odbc_exec() hoặc odbc_execute(). Cú pháp của hàm odbc_result_all():

    int odbc_result_all (int result_identifier [, chuỗi table_format])

    Tham số result_id chỉ định mã định danh kết quả được trả về khi gọi thành công tới odbc_exec() hoặc odbc_execute(). Tham số table_format tùy chọn truyền tải các đặc điểm của bảng HTML. Hãy xem xét ví dụ sau:

    obdc_connect("myAccessDB", "người dùng", "bí mật")

    hoặc die("Không thể kết nối với cơ sở dữ liệu ODBC");

    $query = "CHỌN * TỪ khách hàng";

    $result = odbc_exec($connect, $query) hoặc die("Không thể" thực hiện truy vấn!");

    odbc_result_all($result, "BGCOLOR="#c0c0c0" border="1" ");

    odbc_close ($ kết nối);

    Kết quả của việc chạy ví dụ này là nội dung của bảng khách hàng sẽ được hiển thị trong một bảng có nền màu xám nhạt với đường viền có độ dày 1. Hình thức của bảng đối với dữ liệu được hiển thị trong Hình. 11.1, thể hiện trong hình. 11.2.

    Cơm. 11.2. Dữ liệu ODBC trong trình duyệt

    odbc_free_result()

    Phong cách lập trình tốt đòi hỏi phải giải phóng tất cả các tài nguyên liên quan đến các hoạt động đã hoàn thành. Khi làm việc với các truy vấn ODBC, tác vụ này được giải quyết bằng hàm odbc_free_result(). Cú pháp của hàm odbc_free_result():

    int odbc_free_result (int result_identifier)

    Tham số hàm chuyển mã định danh của kết quả, mã này sẽ không còn được sử dụng trong chương trình nữa. Hãy nhớ rằng tất cả tài nguyên bộ nhớ sẽ tự động được giải phóng khi tập lệnh hoàn tất; do đó, việc gọi odbc_free_result() chỉ cần thiết cho các truy vấn rất lớn tiêu tốn lượng bộ nhớ rất lớn. Dưới đây là ví dụ minh họa việc sử dụng odbc_free_result(). Hãy nhớ rằng bạn thường có thể thực hiện mà không cần tính năng này trừ khi bạn có ý định chạy nhiều truy vấn trong một tập lệnh duy nhất, vì tất cả bộ nhớ sẽ tự động được giải phóng khi tập lệnh kết thúc.

    obdc_connect("myAccessDB", "người dùng", "bí mật")

    hoặc die("Không thể kết nối với cơ sở dữ liệu ODBC");

    $query = "CHỌN * TỪ khách hàng":

    $result = odbc_exec($connect, $query) hoặc die("Không thể" thực hiện truy vấn!");

    odbc_result_all($result, "BGCOLOR="#c0c0c0" border="1" "");

    odbc_free_result($kết quả);

    odbc_close ($ kết nối);

    Sau khi odbc_result_all() sử dụng xong ID kết quả, bộ nhớ sẽ được trả về hệ thống bằng odbc_free_result().

    Điều này kết thúc phần giới thiệu của chúng tôi về các hàm ODBC trong PHP, những hàm không thể thiếu khi tạo các giao diện dựa trên ODBC đơn giản để truy cập qua Web. Trong phần tiếp theo, nhiều hàm trong số này sẽ được sử dụng để chứng minh mức độ dễ dàng tương tác với một trong những DBMS phổ biến nhất, Microsoft Access, dựa trên PHP.

    Microsoft Access và PHP

    Sự phổ biến của Microsoft Access DBMS (http://www.microsoft.com/office/access) một phần được giải thích bởi giao diện đồ họa tiện lợi của nó. Ngoài việc sử dụng Access như một DBMS độc lập, bạn có thể sử dụng giao diện đồ họa của nó để sắp xếp công việc với các cơ sở dữ liệu khác - ví dụ: MySQL hoặc Microsoft SQL Server.

    Để chứng minh khả năng hỗ trợ ODBC trong PHP, tôi sẽ mô tả quá trình kết nối với cơ sở dữ liệu Microsoft Access trong PHP. Điều này dễ thực hiện một cách đáng ngạc nhiên, nhưng nhờ sự phổ biến của Microsoft Access, đây là một sự bổ sung hữu ích cho kho vũ khí sáng tạo của bạn. Tôi sẽ mô tả quá trình này từng bước:

    1. Tạo cơ sở dữ liệu Access. Giả định rằng bạn đã biết cách thực hiện việc này và nếu bạn không biết cách thực hiện nhưng vẫn muốn làm theo cách thực hiện ví dụ này, hãy sử dụng các dịch vụ của chương trình hướng dẫn. Tôi đã tạo một cơ sở dữ liệu tiêu chuẩn để lưu trữ thông tin liên hệ bằng trình hướng dẫn. Hãy nhớ tạo nhiều bản ghi trong bảng và ghi nhớ tên bảng, chúng ta sẽ sớm cần đến nó!
    2. Lưu cơ sở dữ liệu trên máy tính của bạn.
    3. Trong bước tiếp theo, chúng tôi sẽ tổ chức quyền truy cập vào cơ sở dữ liệu Access bằng ODBC. Chọn Bắt đầu > Cài đặt > Panel Điều khiển (Bắt đầu > Cài đặt > Bảng điều khiển). Xác định vị trí biểu tượng Nguồn dữ liệu ODBC (32 bit) trong Pa-nen Điều khiển. Biểu tượng này khởi chạy Quản trị viên ODBC, được thiết kế để định cấu hình các trình điều khiển và nguồn dữ liệu khác nhau trên hệ thống của bạn. Khởi chạy chương trình bằng cách nhấp đúp vào biểu tượng này. Cửa sổ Quản trị viên mở trên tab DSN của người dùng theo mặc định. Tab này liệt kê các nguồn dữ liệu dành riêng cho một người dùng cụ thể và chỉ có thể được sử dụng trên máy tính đó. Trong ví dụ này, đây là nguồn dữ liệu sẽ được sử dụng.
    4. Nhấp vào nút Thêm... ở phía bên phải của cửa sổ. Một cửa sổ mới mở ra để chọn trình điều khiển được thiết kế để hoạt động với nguồn mới. Chọn dòng Microsoft Access Driver (*.mdb) và nhấn Finish.
    5. Trên màn hình xuất hiện cửa sổ mới: Installing the ODBC Driver for Microsoft Access (ODBC Microsoft Access Setup). Tìm hộp văn bản Tên nguồn dữ liệu trong biểu mẫu và nhập tên của cơ sở dữ liệu Access mà bạn đã tạo. Nếu muốn, bạn có thể nhập mô tả vào hộp văn bản nằm ngay bên dưới trường Tên nguồn dữ liệu.
    6. Nhấp vào nút Chọn... - một cửa sổ kiểu Windows Explorer xuất hiện. Nó yêu cầu bạn tìm cơ sở dữ liệu sẽ được truy cập bằng ODBC.
    7. Tìm cơ sở dữ liệu của bạn trong cây thư mục và nhấp đúp vào nó. Bạn được đưa trở lại cửa sổ Cài đặt Trình điều khiển ODBC cho Microsoft Access. Đường dẫn đến cơ sở dữ liệu đã chọn được hiển thị phía trên nút Chọn... Nhấp vào OK.
    8. Sẵn sàng! Bây giờ bạn có thể làm việc với cơ sở dữ liệu Access bằng ODBC.

    Tất cả những gì bạn phải làm là tạo một tập lệnh để bạn làm việc với cơ sở dữ liệu thông qua ODBC. Trong trường hợp sau đây, các hàm ODBC phổ biến (ở trên) sẽ được dùng để hiển thị tất cả thông tin từ bảng liên hệ được tạo bằng trình hướng dẫn Access. Tuy nhiên, trước khi xem xét kịch bản, sẽ rất hữu ích nếu biết bảng Danh bạ trông như thế nào trong Access (Hình 11.3).

    Cơm. 11.3. Bảng danh bạ trong MS Access

    Bây giờ bạn đã biết thông tin nào sẽ được lấy từ cơ sở dữ liệu, chúng ta có thể chuyển sang tập lệnh. Nếu bạn quên chức năng của hàm, hãy tham khảo mô tả ở đầu chương này. Kết quả của Liệt kê 11.7 được thể hiện trong Hình. 11.4.

    Liệt kê 11.7. Sử dụng hàm ODBC để làm việc với MS Access

    // Kết nối với nguồn dữ liệu ODBC "contactDB" ;connect = odbc_connect("contactDB", "","")

    hoặc die("Không thể kết nối với nguồn dữ liệu.");

    // Tạo văn bản yêu cầu

    $query = "CHỌN First_Name, Last_Name, Cell_Phone, Email TỪ Danh bạ";

    // Chuẩn bị yêu cầu

    $result = odbc_prepare($connect,$query);

    // Thực hiện truy vấn và hiển thị kết quả

    odbc_execute($kết quả);

    odbc_result_all($result, "BGCOLOR="#c0c0c0" border=1");

    // Quá trình xử lý kết quả hoàn tất, bộ nhớ trống odbc_free_result($result);

    // Đóng kết nối odbc_close($connect);

    Mọi chuyện không đơn giản sao? Điều tốt nhất là tập lệnh này hoàn toàn tương thích với mọi DBMS khác hỗ trợ ODBC. Để thực hành, hãy thử lặp lại tất cả các bước được mô tả cho một DBMS khác, chạy tập lệnh - và bạn sẽ nhận được kết quả tương tự như trong Hình 2. 11.4.

    Cơm. 11.4. Nội dung của bảng Danh bạ trong trình duyệt web

    Dự án: Thư mục liên kết PHP

    Cách dễ nhất để lấp đầy trang web của bạn bằng nội dung thực là để người dùng làm điều đó cho bạn. Tất nhiên, cách thuận tiện nhất để nhập dữ liệu là sử dụng biểu mẫu HTML.

    Thông tin người dùng nhập vào phải được xử lý và lưu trữ. Bản thảo của chương trước đã cho thấy nhiệm vụ này có thể được thực hiện dễ dàng như thế nào bằng cách sử dụng PHP và một tệp văn bản. Tất nhiên, các tệp văn bản rất tốt để lưu trữ các mẩu dữ liệu tương đối nhỏ và đơn giản, nhưng trong các ứng dụng web chính thức, thông tin thường được lưu trữ trong cơ sở dữ liệu. Trong ví dụ này, cơ sở dữ liệu MySQL được sử dụng để lưu trữ thông tin về các trang web. Để điều hướng dễ dàng hơn, các trang web được chia thành nhiều loại. Người dùng có thể nhập thông tin về trang web ở dạng HTML và gán nó vào một trong các danh mục tiêu chuẩn do quản trị viên trang xác định. Ngoài ra, người dùng có thể tải trang chỉ mục và xem danh sách tất cả các trang web trong một danh mục cụ thể bằng cách nhấp vào tiêu đề của nó.

    Trước tiên, bạn phải quyết định thông tin trang web nào sẽ được lưu trữ trong cơ sở dữ liệu SQL. Để đơn giản, tôi sẽ giới hạn bản thân ở nhóm thuộc tính sau: tiêu đề, URL, danh mục, ngày đưa vào và mô tả. Vì vậy, định nghĩa bảng trong MySQL trông giống như thế này:

    mysql>tạo dấu trang bảng (danh mục INT, site_name char(35), url char(50),

    ngày_thêm ngày, mô tả char(254));

    Có một số điều đáng lưu ý về định nghĩa bảng dấu trang. Đầu tiên, thông tin về danh mục trang web vì lý do nào đó được lưu trữ dưới dạng số nguyên -- nhưng chẳng phải sẽ đúng hơn nếu làm cho tên danh mục trở nên có ý nghĩa và dễ hiểu hơn đối với người dùng sao? Đừng lo lắng, một mảng sẽ được tạo trong tệp khởi tạo liên kết các chỉ mục số nguyên với tên danh mục. Trong tương lai, quản trị viên có thể thay đổi và thậm chí xóa từng danh mục. Việc lưu trữ thông tin về các danh mục giúp đơn giản hóa rất nhiều nhiệm vụ này. Ngoài ra, trường số nguyên giúp tiết kiệm dung lượng ổ đĩa vì tên danh mục được lưu trong bảng nhiều lần. Một trường hợp khác liên quan đến cấu trúc bảng là giới hạn độ dài mô tả ở mức 254 ký tự. Tùy thuộc vào số lượng mô tả này, thay vì loại char(), bạn có thể sử dụng loại phương tiện hoặc loại văn bản. Để biết thêm thông tin về các loại trường, hãy xem tài liệu MySQL.

    Bước tiếp theo khi làm việc trên ứng dụng này là tạo một tệp khởi tạo. Ngoài các biến toàn cục, hai hàm được xác định trong tệp khởi tạo: add_bookmark() và view_bookmark(). Hàm add_bookmark() lấy thông tin đầu vào của người dùng từ biểu mẫu và đưa nó vào cơ sở dữ liệu. Hàm view_bookmark() lấy chỉ mục của một danh mục, đọc tất cả các bài đăng thuộc danh mục được chỉ định từ cơ sở dữ liệu và hiển thị chúng trong trình duyệt. Tệp khởi tạo ứng dụng init.inc với các chú thích được hiển thị trong Liệt kê 11.8.

    Liệt kê 11.8. Liên kết tập tin khởi tạo thư mục (init.inc)

    // Tập tin: init.inc

    // Mục đích: các biến và hàm toàn cục.

    // được sử dụng trong dự án

    // Tiêu đề trang chuẩn $title = "My Bookmark Repository":!}

    // Màu nền $bg_color = "trắng";

    $post_date = ngày("Ymd");

    "sự giải trí"

    // Dữ liệu máy chủ MySQL $host = "localhost"; $user = "gốc"; $pswd = "";

    // Tên cơ sở dữ liệu $database = "book";

    // Tên bảng $bookmark_table = "bookmark";

    // Màu của các ô trong bảng $cell_color = "#c0c0c0";

    // Thiết lập kết nối tới máy chủ MySQL

    @mysql_pconnect($host, $user, $pswd) or die("Không thể kết nối với máy chủ MySQL!");

    // Chọn cơ sở dữ liệu

    @mysql_select_db($database) or die("Không thể chọn cơ sở dữ liệu Sdatabase!");

    // Hàm: add_bookmark()

    hàm add_bookmark (Danh mục, Ssitejname. $url, $description) (

    TOÀN CẦU $bookmark_table, $post_date;

    $query = "CHÈN VÀO $bookmark_table

    GIÁ TRỊ(\"$category\", \"$site_name\", \"$url\", \"$post_date\", \"$description\")";

    $result = @mysql_query($query) or die("Không thể chèn thông tin dấu trang!");

    ) // add_bookmark<

    // Hàm: view_bookmark()

    // Mục đích: chọn tất cả các link từ bảng bookmark,

    hàm view_bookmark ($danh mục) (

    TOÀN CẦU $bookmark_table, $cell_color, $categories;

    $query = "CHỌN tên_trang web, url, DATE_FORMAT(date_ Added,"%m-%d-%Y") NHƯ date_ Added, mô tả

    TỪ bảng đánh dấu $ WHERE Category = $category ĐẶT HÀNG THEO datejdded DESC";

    $kết quả = @mysql_query($query);

    in "

    ";

    in "

    ";

    if (mysql_numrows($result) > 0);

    while ($row = mysql_fetch_array($result)) ;

    Đã đăng: ".$row["ngày thêm"]."
    "

    in "

    ";

    in "

    ";

    in "

    ";

    in "

    ";

    in "

    ";

    in "

    Danh mục: $categories[$category]
    ";

    in " ".$row["site_name"]."

    in "

    ";

    in " http://".

    $row["url"]."
    ";

    in "

    ";

    in $row["mô tả"]."
    ";

    in "


    Hiện tại không có dấu trang nào thuộc thể loại này. Tại sao bạn không cộng một?
    Quay lại chỉ mục

    in " Thêm dấu trang

    ";

    // xem dấu trang

    Trang tiếp theo, add_bookmark.php (Liệt kê 11.9), là nơi bạn nhập thông tin về liên kết mới để đưa vào cơ sở dữ liệu. Hàm add_bookmark() được gọi để xử lý dữ liệu người dùng.

    Liệt kê 11.9. Chương trình add_bookmark.php

    BAO GỒM("init.inc");

    <?=$title:?>

    nếu (! $seenform):

    <1nput type="hidden" name="seenform" value="y">

    Loại:


    Tên trang web:


    URL: (làm khôngbao gồm "http://"!)


    Sự miêu tả:


    add_bookmark($category, $site_name, $url, $description);

    in "

    Dấu trang của bạn đã được thêm vào kho lưu trữ.

    Bấm vào đâyđể quay lại chỉ mục.

    ";

    Khi trang được tải lần đầu, trình duyệt sẽ hiển thị biểu mẫu (Hình 11.5).

    Cơm. 11.5. Biểu mẫu được hiển thị bởi trang add_bookmark.php

    Trang tiếp theo, view_bookmark.php, chỉ cần gọi hàm view_bookmark(). Mã cho trang này được hiển thị trong Liệt kê 11.10.

    Liệt kê 11.10. Chương trình view_bookmark.php

    BAO GỒM("Listing11-8.php"); ?>

    <?=$title:?>

    view_bookmark($category) :

    Cơm. 11.6. Thực thi trang view_bookmark.php cho chuyên mục ăn uống

    Tất cả những gì còn lại là tạo một trang mà trên đó người dùng chọn các liên kết từ danh sách. Tôi đặt tên tệp này là index.php (Liệt kê 11.11).

    Liệt kê 11.11. Chương trình index.php

    BAO GỒM("init.inc");

    alink="#808040">

    while (list($key, Svalue) = each(Scategories)) :

    in " giá trị $
    ";

    Thêm dấu trang mới

    Nếu bạn để mảng $categories với các giá trị được lưu trong tệp init.inc, việc chạy Liệt kê 11.11 sẽ gửi mã HTML hiển thị trong Liệt kê 11.12 tới trình duyệt.

    Liệt kê 11.12. Đầu ra được tạo bằng cách chạy index.php

    Chọn danh mục dấu trang để xem:

    máy tính

    sự giải trí

    ăn uống

    cách sống

    chính phủ

    du lịch

    Thêm dấu trang mới

    Kết quả

    Chương này khá dài và đối với một số độc giả, đây có thể là chương quan trọng nhất trong toàn bộ cuốn sách. Không còn nghi ngờ gì nữa, làm việc với cơ sở dữ liệu

    là một trong những tính năng đáng chú ý nhất của ngôn ngữ PHP, vì cơ sở dữ liệu mở rộng đáng kể chức năng của trang web. Đặc biệt, chúng tôi đã đề cập đến các chủ đề sau:

    • thông tin chung về SQL;
    • hỗ trợ cơ sở dữ liệu tiêu chuẩn trong PHP;
    • thông tin giới thiệu về máy chủ MySQL;
    • các hàm PHP tiêu chuẩn để làm việc với MySQL;
    • thực hiện một hệ thống tìm kiếm đơn giản;
    • sắp xếp bảng;
    • thông tin chung về ODBC;
    • các hàm PHP tiêu chuẩn để làm việc với ODBC;
    • tương tác với Microsoft Access bằng PHP;
    • lưu trữ dữ liệu người dùng trên trang web.

    Người đọc đang phát triển các trang web PHP lớn, thực sự năng động sẽ thấy mình quay lại chủ đề cơ sở dữ liệu nhiều lần. Tôi khuyên bạn nên nghiên cứu kỹ không chỉ tài liệu PHP mà còn cả các tài nguyên khác dành riêng cho công nghệ cơ sở dữ liệu. Trong lĩnh vực này, cũng như trong nhiều công nghệ hiện đại, ngay cả các chuyên gia cũng không phải lúc nào cũng có thời gian để theo kịp tất cả những đổi mới.

    Chương tiếp theo được dành cho các mẫu - một trong những chủ đề không hề tầm thường của lập trình web. Sử dụng các mẫu khi lập trình bằng PHP giúp tiết kiệm đáng kể thời gian và công sức khi làm việc trên các trang web quy mô lớn.

    Văn bản sử dụng bản dịch tài liệu chính thức do Câu lạc bộ quản trị trang web toàn Nga thực hiện.

    Tất cả công việc với cơ sở dữ liệu đều liên quan đến việc kết nối với máy chủ, chọn cơ sở dữ liệu, gửi yêu cầu, xử lý yêu cầu và ngắt kết nối khỏi cơ sở dữ liệu. Vì vậy, chúng ta hãy xem xét toàn bộ điều này từng điểm một. Để rõ ràng cho toàn bộ văn bản, hãy tưởng tượng rằng một máy chủ MySQL được cài đặt trên máy cục bộ. Cổng để làm việc với nó là tiêu chuẩn. Để kết nối, chúng tôi sẽ sử dụng tên người dùng “root” và mật khẩu “no_one”.

    Sự liên quan

    Kết nối với cơ sở dữ liệu được thực hiện bằng hàm “mysql_connect()”. Nó được truyền ba tham số: tên máy chủ (hoặc tên máy chủ:cổng kết nối), tên người dùng và mật khẩu. Nếu lệnh gọi thứ hai tới "mysql_connect()" được thực hiện với cùng các đối số thì sẽ không có kết nối mới nào được thiết lập - thay vào đó, ID kết nối của kết nối đã mở sẽ được trả về (tức là công việc sẽ tiếp tục với cùng một cơ sở dữ liệu). Nếu bạn chỉ làm việc với một cơ sở dữ liệu thì bạn không cần tạo mã định danh kết nối. Khi tập lệnh đã thực thi xong, kết nối đến máy chủ sẽ bị đóng, trừ khi nó được đóng một cách rõ ràng bằng lệnh gọi "mysql_close()" trước đó.

    Ví dụ: $connect = mysql_connect('localhost', 'root', 'no_one'); Trong trường hợp này, biến $connect là mã định danh kết nối. Nếu bạn chỉ làm việc với một cơ sở dữ liệu thì mã sẽ được viết mà không có mã định danh: mysql_connect('localhost', 'root', 'no_one');

    Chọn cơ sở dữ liệu

    "mysql_select_db" - chọn cơ sở dữ liệu MySQL. Điều này có nghĩa là máy chủ có thể chứa không phải một cơ sở dữ liệu mà là nhiều cơ sở dữ liệu. Với lệnh này, chúng tôi sẽ chọn lệnh chúng tôi cần (mà chúng tôi có quyền). Tham số của hàm này là tên của cơ sở dữ liệu. Cơ sở dữ liệu được chọn theo cách này sẽ hoạt động và được liên kết với một mã định danh cụ thể. Nếu ID kết nối không được xác định thì kết nối cuối cùng tới cơ sở dữ liệu sẽ được sử dụng.

    Ví dụ: mysql_select_bd('test', $connect); - trong đó test là tên cơ sở dữ liệu và $connect là mã định danh kết nối. Nếu bạn chỉ làm việc với một cơ sở dữ liệu thì mã sẽ được viết mà không có mã định danh: mysql_select_bd('test');

    Gửi yêu cầu

    mysql_query() gửi truy vấn đến cơ sở dữ liệu hiện đang hoạt động trên máy chủ được liên kết với ID liên kết cụ thể. Nếu không có ID nào được chỉ định, kết nối mở cuối cùng sẽ được sử dụng. Tham số của hàm này là một chuỗi có truy vấn sql.

    Ví dụ: $tmp=mysql_query("slect * from table", $connect); - lệnh này sẽ trả về toàn bộ nội dung của bảng bảng từ cơ sở dữ liệu đang hoạt động được trỏ bởi mã định danh $connect. Nếu bạn chỉ làm việc với một cơ sở dữ liệu thì mã sẽ được viết mà không có mã định danh: $tmp=mysql_query(“slect * from table”);

    Đang xử lý yêu cầu

    Có một số chức năng để xử lý yêu cầu. Việc lựa chọn phương pháp này hay phương pháp khác để xử lý yêu cầu phụ thuộc vào phong cách lập trình và nhiệm vụ hiện tại. Cũng cần lưu ý rằng các tùy chọn khác nhau “tải” máy chủ theo những cách khác nhau (một số rất nhiều, một số không quá nhiều). Chúng ta hãy xem xét một vài trong số họ.
    mysql_fetch_object - trả về một đối tượng php dưới dạng kết quả xử lý. Phương pháp này tốt cho những người đã quen với lập trình đối tượng
    Ví dụ: while($result= mysql_fetch_object($tmp)) echo($result->name);

    mysql_fetch_array - Tìm nạp kết quả dưới dạng mảng kết hợp. Phương pháp này tốt cho người mới bắt đầu (mặc dù nó phụ thuộc vào việc ai sẽ thích nó hơn).

    Đóng một kết nối

    Kết nối được đóng bằng hàm mysql_close(). Tham số của nó là mã định danh kết nối cơ sở dữ liệu. Nếu tham số này không được chỉ định, kết nối được gọi cuối cùng sẽ bị đóng.

    Tốt xấu

      MySQL - Hệ thống quản lý cơ sở dữ liệu (DBMS). Sự khác biệt chính so với tất cả các DBMS khác là nó miễn phí. Bởi vì MySQL là miễn phí nên nó...

      mysql - Hệ thống quản lý cơ sở dữ liệu (DBMS). Sự khác biệt chính so với tất cả các DBMS khác là nó miễn phí. Vì MySQL là miễn phí nên nó...