Giáo trình Cơ sở dữ liệu - APACHE, PHP, MYSQL

Tóm tắt Giáo trình Cơ sở dữ liệu - APACHE, PHP, MYSQL: ... $movie_name thay vì làm như sau: while ($row = mysql_fetch_row($result)) { $movie_details .=<<<EOD $row[‘movie_name’] EOD; } Trong đoạn trước, mọi thứ chính xác như nhau nhưng nó sẽ giới hạn nếu bạn muốn định dạng bất kỳ giá trị biến nào. Thực hành, gôm nó tất cả lại với nhau. ...ay thế một vài vùng soạn thảo với nội dung mới trong một hồ sơ có sẵn. Chuẩn bị Battlefield Điều này đầy đủ và hoàn chỉnh như 1 đơn vị Vulcan, nhưng nếu muốn quản lý cơ sở dữ liệu thì biến toàn cục phải được tạo ra. Để lưu trong cùng một thời gian thì chúng ta sử dụng cơ sở dữ liệu hiện có để trán...jpeg($image_jpg, $newfilename); Đây là nơi thật sự chuyển đổi, trước dòng này hình tạm có đặc điểm chung. Bạn quyết định làm file đích JPG với hàm imagejpeg. Bạn cũng có thể sử dụng imagepng hoặc imagegif, nhưng một lần nữa, bạn muốn làm việc với JPG vì phần lớn những file bạn load lên sẽ được sao...

doc258 trang | Chia sẻ: havih72 | Lượt xem: 193 | Lượt tải: 0download
Nội dung tài liệu Giáo trình Cơ sở dữ liệu - APACHE, PHP, MYSQL, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
au:
<?php
$error_no = $_SERVER[‘QUERY_STRING’];
switch ($error_no)
 {
case 400:
$error_output = “"Bad Request" Error Page - “ .
“(Error Code 400)”;
$error_output .= “The browser has made a Bad Request”;
$error_output .= “” .
“Contact the system administrator”;
$error_output .= “ if you feel this to be in error”;
break;
case 401:
$error_output = “"Authorization Required" “ .
“Error Page - (Error Code 401)”;
$error_output .= “You have supplied the wrong information to “ .
“access a secure area”;
$error_output .= “” .
 “Contact the system administrator”;
$error_output .= “ if you feel this to be in error”;
break;
case 403:
$error_output = “"Forbidden Access" Error Page - “ .
“(Error Code 403)”;
$error_output .= “You are denied access to this area”;
$error_output .= “” .
“Contact the system administrator”;
$error_output .= “ if you feel this to be in error”;
break;
case 404:
$error_output = “"Page Not Found" Error Page - “ .
“(Error Code 404)”;
$error_output .= “The page you are looking for cannot “ .
“be found”;
$error_output .= “” .
“Contact the system administrator”;
$error_output .= “ if you feel this to be in error”;
break;
case 500:
$error_output = “"Internal Server Error" “ .
“Error Page – (Error Code 500)”;
$error_output .= “The server has encountered an internal “ .
“error”;
$error_output .= “” .
“Contact the system administrator”;
$error_output .= “ if you feel this to be in error”;
break;
default:
$error_output = “Error Page”;
$error_output .= “This is the custom error Page”;
$error_output .= “You should be here”;
}
?>
Beginning PHP5, Apache, MySQL Web Development
<?php
echo $error_output;
?>
3.Mở trình duyệt và vào 196H hoặc bất kỳ trang web nào mà bạn biết là không thể vào thăm trang web, bạn sẽ nhìn thấy như hình 9.1 
Hình 91
Cách khác để kiểm tra rằng đoạn mã của bạn được ứng dụng vào trong trang web với chuỗi thông tin truy vấn cho người dùng. Ví dụ mở trình duyệt với tên 197H , trang sẽ sử dụng truy vấn và chạy đoạn mã nếu có lỗi nó sẽ xuất hiện như hình sau ( giống hình trước).
Hình 9.2
Nó hoạt động thế nào?
Bạn vừa tạo ra những thông báo lỗi thường gặp, bằng việc sử dụng switch(), bạn có thể hiển thị thích hợp những thông báo lỗi cần thiết cho người dùng.
Lỗi tài liệu của Apache: Trang báo lỗi thông thường
Bạn chỉ cho người dùng nhìn thấy những lỗi thông thường, mặc dù bạn có thể làm nhiều hơn thế, đây là cách tốt để bạn theo dõi những trang mà bạn không thể kiểm tra định kỳ được. 
Ví dụ tạo một E_mail lỗi
Trong bài tập này, bạn tạo ra một email phát sinh tự động gởi đến người quản trị thời gian xuất hiện lỗi, vào ngày nào, lỗi gì, trang nào phát sinh lỗi và thông báo lỗi nào được hiển thị cho người dùng định hướng.
1. Mở file error.php, thay đổi như sau:
2. Nhập vào đoạn mã sau:
<?php
function email_admin($error_no,
$error_output,
$full_date,
$full_time,
$request_page) 
{
$to = “Administrator ”;
$subject = “Apache Error Generation”;
$body = “”;
$body .= “”;
$body .= “Apache Error”;
$body .= “”;
$body .= “”;
$body .= “Error occurred on ” . $full_date . “ “ .
“at ” . $full_time . “”;
$body .= “Error received was a ” . $error_no . “ error.”;
$body .= “The page that generated the error was: ” .
$request_page . “”;
$body .= “The generated error message was:” . $error_output;
$body .= “”;
$body .= “”;
$headers = “MIME-Version: 1.0\r\n”;
$headers .= “Content-type: text/html; charset=iso-8859-1\r\n”;
$headers .= “From: Apache Error \r\n”;
$headers .= “Cc: webmaster@yourdomain.com\r\n”;
mail($to, $subject, $body, $headers);
}
$date = getdate();
$full_date = $date[‘weekday’] . “, “ .
$date[‘month’] . “ “ .
$date[‘mday’] . “, “ .
$date[‘year’];
$full_time = $date[‘hours’] . “:” .
$date[‘minutes’] . “:” .
$date[‘seconds’] . “:” .
$date[‘year’];
$error_no = $_SERVER[‘QUERY_STRING’];
$request_page = $_SERVER[‘REQUEST_URI’];
switch ($error_no) 
{
case 400:
$error_output = “\”Bad Request\” Error Page - “ .
“(Error Code 400)”;
$error_output .= “The browser has made a Bad Request”;
$error_output .= “” .
“Contact the system administrator”;
$error_output .= “ if you feel this to be in error”;
email_admin($error_no,
$error_output,
$full_date,
$full_time,
$request_page);
break;
case 401:
$error_output = “\”Authorization Required\” Error Page - “ .
“(Error Code 401)”;
$error_output .= “You have supplied the wrong information to “ .
“access a secure area”;
$error_output .= “” .
“Contact the system administrator”;
$error_output .= “ if you feel this to be in error”;
email_admin($error_no,
$error_output,
$full_date,
$full_time,
$request_page);
break;
case 403:
$error_output = “\”Forbidden Access\” Error Page - “ .
“(Error Code 403)”;
$error_output .= “You are denied access to this area”;
$error_output .= “” .
“Contact the system administrator”;
$error_output .= “ if you feel this to be in error”;
email_admin($error_no,
$error_output,
$full_date,
$full_time,
$request_page);
break;
case 404:
$error_output = “\”Page Not Found\” Error Page - “ .
“(Error Code 404)”;
$error_output .= “The page you are looking for “ .
“cannot be found”;
$error_output .= “” .
“Contact the system administrator”;
$error_output .= “ if you feel this to be in error”;
email_admin($error_no,
$error_output,
$full_date,
$full_time,
$request_page);
break;
case 500:
$error_output = “\”Internal Server Error\” Error Page - “ .
“(Error Code 500)”;
$error_output .= “The server has encountered “ .
“an internal error”;
$error_output .= “” .
“Contact the system administrator”;
$error_output .= “ if you feel this to be in error”;
email_admin($error_no,
$error_output,
$full_date,
$full_time,
$request_page);
break;
default:
$error_output = “Error Page”;
$error_output .= “This is the custom error Page”;
$error_output .= “You should be here”;
}
?>
Beginning PHP5, Apache, MySQL Web Development
<?php
echo $error_output;
?>
Nó hoạt động thế nào?
Hàm mail() được sử dụng để gởi email cho người quản trị, getdate() ghi nhớ thời gian và ngày xuất hiện lỗi. Hàm mail() cho phép bạn gởi mail đến bất cứ ai khi xuất hiện lỗi.
Thi hành lỗi và tạo ra việc sửa trang lỗi với PHP
Phụ thuộc vào kiểu lỗi xuất hiện mà đưa ra những thông báo lỗi thích hợp, phải đưa ra những lỗi để người nhận thông báo lỗi cảm thấy dễ chịu, không cảm thấy xấu hổ và có hướng giải quyết lỗi tốt.
Các loại lỗi trong PHP
Có 12 kiểu lỗi trong PHP, được liệt kê dưới đây
Lỗi
Giá trị nguyên
Tên hằng
E_ERROR
1
Lỗi nặng
E_WARNING
2
Lỗi nhẹ(cảnh báo)
E_PARSE
4
Thời gian biên dịch lỗi
E_NOTICE
8
Chú ý
E_CORE_ERROR
16
Lỗi nặng xuất hiện lúc khởi động
E_CORE_WARNINGS
32
Lỗi không nặng ngay lúc khởi động
E_COMPILE_WARNING
128
Lỗi thời gian biên dịch không nặng lắm(cảnh báo)
E_USER_ERROR
256
Lỗi phát sinh người dùng bởi hàm PHP trigger_error()
E_USER_WARNING
512
Cảnh báo người dùng khi dùng hàm trigger_error()
E_USER_NOTICE
1024
Chú ý khi dùng hàm trigger_error()
E_ALL
2047
Tất cả những lỗi và cảnh báo 
E_STRICT
2048
Chú ý để thời gian thực hiện cần có thay đổi tương thích
	Bạn không phải lo lắng về lỗi đánh máy, hãy quan tâm đến những cảnh báo, những lỗi mà bạn gặp phải, để có sự giải quyết kịp thời, dễ sử dụng hơn cho người dùng.
Ở đây có 3 loại lỗi chính 
Fatal error: Lỗi nặng khi thực hiện, thông báo lỗi không thể sửa đổi, thực hiện theo ngyuên bản
Warning: Cảnh báo, không được dùng tập lệnh vừa rồi.
Notices: Chú ý, khi chạy vẫn đúng nhưng có một lỗi nhỏ.
Việc phát sinh lỗi PHP
Chúng ta tạo vài lỗi để có thể kiểm tra cần giải quyết thế nào?Như ví dụ sau:
<?php
//set string with “Wrox” spelled wrong
$string_variable = “Worx books are great!”;
//try to use str_replace to replace Worx with Wrox
//this will generate an E_WARNING
//because of wrong parameter count
str_replace(“Worx”, “Wrox”);
?>
Nếu bạn chạy đoạn mã này, bạn sẽ thấy lỗi như sau:
Warning: Wrong parameter count for str_replace() in
C:\FoxServ\www\errorhandling\error1.php on line 8
Lỗi này xuất hiện vì hàm str_replace yêu cầu tham số thứ 3 cho hàm. Tham số này là biến, $string_variable hoặc chuỗi văn bản mà bạn muốn nghiên cứu cho tham số thứ nhất, “Worx” và thay thế nó với “Worx”. Bởi điều này không tạo ra lỗi lớn mà không thi hành tập lệnh, bạn có thể vẫn chạy đoạn code sau khi lỗi xuất hiện, nếu bạn làm như sau:
<?php
//set string with “Wrox” spelled wrong
$string_variable = “Worx books are great!”;
//try to use str_replace to replace Worx with Wrox
//this will generate an E_WARNING
//because of wrong parameter count
str_replace(“Worx”, “Wrox”);
//this is a non-fatal error, so the original
//variable should still show up after the warning
echo $string_variable;
?>
Chuỗi vẫn tiếp tục được thi hành sau lỗi, nó sẽ sinh ra như sau:
Warning: Wrong parameter count for str_replace() in
c:\FoxServ\www\errorhandling\error1.php on line 8
Worx books are great!
Kế đến, chúng ta sẽ đưa ra những lỗi nặng để cho bạn thấy nó sinh ra những kết quả khác nhau khi lỗi xuất hiện như thế nào.
<?php
//beginning of page
echo “Beginning”;
//we are going to make a call to
//a function that doesn’t exist
//this will generate an E_ERROR
//and will halt script execution
//after the call of the function
fatalerror();
//end of page
echo “End”;
//won’t be output due to the fatal error
?>
Sẽ xuất hiện như sau:
Beginning
Fatal error: Call to undefined function: fatalerror() in
c:\FoxServ\www\errorhandling\error2.php on line 10.
Chú ý là “Beginning” được đưa ra vì hàm trước nó được gọi, nhưng “End” thì không đưa ra vì lỗi thực hiện quá lớn. Bạn có thể ngăn lỗi lại bằng việc dùng một ký hiệu như sau: @fatalerror (ngăn chặn lỗi nhưng vẫn gặp lỗi khi thi hành)
Khi PHP mặc định lỗi không thấy E_NOTICE xuất hiện, tuy nhiên bạn có thể cho phép người dùng gỡ những lỗi như khi dùng $row[variable] vì PHP coi [variable] như một hằng, nếu không là hằng nó giả thiết là chuỗi trong mảng. Có thể đưa ra thông báo lỗi khi dùng error_reporting(number) mà số không thay đổi.
Nếu bạn không biết cấp độ lỗi được thiết lập, bạn có thể chạy hàm error_reporting() đơn giản với bất kỳ chủ đề nào:
<?php
echo error_reporting();
?>
	Mặc định, tất cả những việc thi hành lỗi được điều khiển bời người xây dựng nên lỗi, cho bạn những thông báo về liểu lỗi, tên file, số dòng lỗi xuất hiện
	Bạn chú ý một lỗi như sau:
Warning: Wrong parameter count for str_replace() in
c:\FoxServ\www\errorhandling\error1.php on line 8
	Thông thường việc phát sinh lỗi thì tốt vì có thể thông báo cho người quản trị biết là anh ta có thể biết nhiều hơn từ những lỗi ấy.
	Ví dụ về việc một người tạo lỗi thông thường
	Bạn sẽ tạo một lỗi thông thường nhưng thân thiện với người dùng và hiển thị như sau:
1. Trình soạn thảo trong ví dụ trước như sau:
<?php
//create your error handler function
function handler($error_type,
$error_message,
$error_file,
$error_line) 
{
echo “Page Error”;
echo “Errors have occurred while executing this page. Contact the “;
echo “administrator “ .
“to report errors”;
echo “Information Generated”;
echo “Error Type: $error_type”;
echo “Error Message: $error_message”;
echo “Error Filename: $error_file”;
echo “Error Line: $error_line”;
}
//set the error handler to be used
set_error_handler(“handler”);
//set string with “Wrox” spelled wrong
$string_variable = “Worx books are great!”;
//try to use str_replace to replace Worx with Wrox
//this will generate an E_WARNING
//because of wrong parameter count
str_replace(“Worx”, “Wrox”);
?>
2. Lưu file với tên custom_error.php và mở trình duyệt, bạn sẽ thấy như 
Hình 9.3
3. Vì lỗi của bạn là do người dùng định nghĩa, bạn có thể bắt lỗi và có thể tạo lại thông báo lỗi dựa vào kiểu lỗi. Tạo file custom_error.php để sắp xếp những lỗi như sau:
<?php
//create your error handler function
function handler($error_type,
$error_message,
$error_file,
$error_line) 
{
switch ($error_type) 
{
//fatal error
case E_ERROR:
echo “Fatal Error”;
die(“A fatal error has occured at line $error_line of file “ .
“$error_file.” .
“Error message created was "$error_message"”);
break;
//warnings
case E_WARNING:
echo “Warning”;
echo “A warning has occured at line $error_line of file “ .
“$error_file.”;
echo “ Error message created was "$error_message"”;
//notices
case E_NOTICE:
//don’t show notice errors
break;
}
}
//set the error handler to be used
set_error_handler(“handler”);
//set string with “Wrox” spelled wrong
$string_variable = “Worx books are great!”;
//try to use str_replace to replace Worx with Wrox
//this will generate an E_WARNING
//because of wrong parameter count
str_replace(“Worx”, “Wrox”);
?>
	4. Lưu file và đưa lên trình duyệt. Kết quả như Hình 9.4. E_ERROR được gọi trong mệnh đề switch có thể sử dụng bất kỳ loại lỗi nào và thực hiện những hoạt động khác nhau tùy theo lỗi. 
	Hình 9.4.
Nó hoạt động thế nào?
Tạo ra thông báo lỗi cho bạn điều khiển đầy đủ những trang web của bạn, bất chấp thành công hay thất bại khi thi hành. Bạn sẽ bắt lỗi, đưa ra thông báo lỗi, hồ sơ thông báo lỗi và lỗi nào xuất hiện. Trang web mà bạn đưa ra thông báo lỗi, trình bày hoặc gởi thông báo nhất định đến người dùng phụ thuộc vào lỗi mà người dùng mắc phải. 
Bạn đã tạo ra thông báo lỗi nhưng không muốn người dùng nhìn thấy thông báo ấy, bạn có thể lịch sự xin lỗi người dùng hãy qua một trang khác vì trang này đang bị lỗi như thế người dùng không thấy lỗi của mình. Dùng phương pháp email có thể cho người dùng không trực tiếp xem xét cơ sở dữ liệu mà là có bao nhiêu yêu cầu tới trang lỗi xuất hiện.
Ví dụ về việc tạo một trang lỗi rõ ràng
Trong bài này, bạn sẽ thiết lập việc thi hành một lỗi rõ ràng như bạn muốn. Bạn có thể tìm tất cả những lỗi mà không cần sử dụng những hướng dẫn có sẵn trong PHP
1. Trình soạn thảo feature_error.php như sau:
<?php
//create your error handler function
function handler($error_type,
$error_message,
$error_file,
$error_line) {
switch($error_type) 
{
//fatal error
case E_ERROR:
$to = “Administrator ”;
$subject = “Custom Error Handling”;
$body = “”;
$body .= “”;
$body .= “Website error”;
$body .= “”;
$body .= “”;
$body .= “Fatal Error”;
$body .= “Error received was a ” . $error_type .
“ error.”;
$body .= “The page that generated the error was: ” .
$error_file . “”;
$body .= “ and was generated on line: ” . $error_line .
“”;
$body .= “The generated error message was:” . $error_message;
$body .= “”;
$body .= “”;
$headers = “MIME-Version: 1.0\r\n”;
$headers .= “Content-type: text/html; charset=iso-8859-1\r\n”;
$headers .= “From: Apache Error \r\n”;
$headers .= “Cc: webmaster@yourdomain.com\r\n”;
mail($to, $subject, $body, $headers);
die(); //kill the script
break;
//warnings
case E_WARNING:
$to = “Administrator ”;
$subject = “Custom Error Handling”;
$body = “”;
$body .= “”;
$body .= “”;
$body .= “”;
$body .= “”;
$body .= “Warning”;
$body .= “Error received was a ” . $error_type .
“ error.”;
$body .= “The page that generated the error was: ” .
$error_file . “”;
$body .= “ and was generated on line: ” . $error_line .
“”;
$body .= “The generated error message was:” . $error_message;
$body .= “”;
$body .= “”;
$headers = “MIME-Version: 1.0\r\n”;
$headers .= “Content-type: text/html; charset=iso-8859-1\r\n”;
$headers .= “From: Apache Error \r\n”;
$headers .= “Cc: webmaster@yourdomain.com\r\n”;
mail($to, $subject, $body, $headers);
break;
//script will continue
//notices
case E_NOTICE:
//don’t show notice errors
break;
}
}
/*
set error handling to 0
we will handle all error reporting
only notifying admin on warnings and fatal errors
don’t bother with notices as they are trivial errors
really only meant for debugging
*/
error_reporting(0);
//set the error handler to be used
set_error_handler(“handler”);
/*
Create the rest of your page here.
We will not be displaying any errors
We will be e-mailing the admin an error message
Keep in mind that fatal errors will still halt the
execution, but they will still notify the admin
*/
?>
	Nó hoạt động thế nào?
 Với cách này đưa ra thông báo đến người dùng những thông báo lỗi thông thường nhưng thân thiện đối với người dùng bằng cách dùng hàm email .
Vì vậy, với cách đơn giản bạn chạy trang này và bạn nhận một lỗi, đôi khi đưa ra thông tin có ích cho người dùng.
Một phương pháp khác của việc thi hành lỗi
Bạn vừa đưa ra những thông báo lỗi thông thường, có một phương pháp khác tự nhiên hơn chèn mệnh đề echo để kiểm tra giá trị của biến và xem mệnh đề điều kiện đúng hay chưa. PHP cũng cung cấp vài thông báo lỗi cho những lỗi đơn giản.
Những ngoại lệ
PHP5 giới thiệu đặc tính mới gọi là những ngoại lệ. Những điều đó tương tự như ngôn ngữ Java. Những điều kiện điều khiển ngọai lệ trong ứng dụng Web và cho bạn một cách hiệu quả để điều khiển những lỗi gặp phải. PHP5 sử dụng phương pháp tìm kiếm, nắm bắt để điều khiển những ngoại lệ.
Ví dụ về việc thử nghiệm với những ngoại lệ
Trong bài này, bạn sẽ tạo một phiên bản đưa ra vài ngoài lệ để thấy chúng làm việc thế nào
1. Tạo một trang PHP với đoạn code sau:
<?php
//$x = “”; //Throws null Exception
//$x = “500”; //Throws less than Exception
$x = “1000”; //Throws NO Exception
try 
{
if ($x == “”) 
{
throw new Exception(“Variable cannot be null”);
}
if ($x < 1000) 
{
throw new Exception(“Variable cannot be less than 1000”);
}
echo “Validation Accepted!”;
}
catch (Exception $exception) 
{
echo $exception->getMessage();
echo “ - Validation Denied!”;
}
?>
2. Lưu đoạn code với tên exceptions.php và chạy nó trong trình duyệt. Bạn không thấy bất cứ lỗi nào
3. Thay $x= “1000” bằng $x= “”
4. Lưu file và chạy một lần nữa, bạn sẽ thấy một thông báo rỗng
5. Thay $x= “” bằng $x= “500”
6. Lưu file lại và bạn sẽ thấy thông báo “less than 1000”
Nó hoạt động thế nào?
Sự hữu ích của khối này là tất cả những điều kiện phải gặp hoặc thấy. Đây là hữu ích khi bạn cần kiểm tra nhiều biến hay không muốn thông qua nhiều mệnh đề if/else cho việc tìm ra kết quả. Tất cả yêu cầu trong mệnh đề if mà đúng thì sẽ thực hiện, sẽ đưa ra thông báo lỗi thích hợp phụ thuộc vào ngoại lệ gặp phải.
Trong vùng thấy lỗi, bạn có thể thi hành lỗi trong bất cứ phương pháp nào bạn thích. Bạn muốn gởi đến người dùng là bạn muốn thiết lập vài biến mặc định, kết nối cả hai hoặc bất cứ cái gì mà bạn cần. 
Hữu ích của việc sử dụng những ngoại lệ là cách chúng đưa ra những hàm và code. Ví dụ, nếu bạn có một hàm gọi là hàm B mà bên trong thì gọi hàm C và một ngoại lệ trong hàm C thông qua việc sử dụng try{} , ngoại lệ sẽ dừng việc xử lý phiên bản nếu khối được tìm thấy
Nếu không tìm thấy try{}catch{} khi thi hành code, lỗi sẽ xuất hiện trên màn hình để thông báo ngoại lệ đã xuất hiện.
Ngoại lệ cũng có thể thông qua như sau:
<?php
try
 {
throw new Exception(“This will be rethrown”);
}
catch (Exception $e) 
{
throw $e;
}
?>
Không gặp những điều kiện
Không phải trong bất cứ đoạn mã nào cũng gặp lỗi, nó chỉ xuất hiện khi liên quan đến PHP, bằng việc sử dụng vài phương pháp khác nhau trong đoạn mã để kiểm tra lỗi xuất hiện.
Bạn đang kiểm tra để thấy nút nhấn khi nào hoặc sẽ không thi hành thông tin khi nào. Bạn có thể làm điều này như sau:
if ($_POST[‘submit’] == “submit”) 
{
//form has been submitted
} else
 {
//form has not been submitted
}
Phân tích lỗi
Phân tích lỗi là kiểu lỗi chính, nó xuất hiện khi bạn quên một dấu chấm phẩy,Những lỗi này không làm với mệnh đề điều kiện, chúng là cú pháp chính là nguyên nhân dừng việc thực thi. Phân tích lỗi xấu hơn những lỗi nặng vì chúng không thể chạy tất cả những phiên bản, chúng cho bạn thông tin về lỗi.
Tóm lại.
Bạn đọc được nhiều thứ trong chương này, từ việc biết được những lỗi cho đến việc phòng ngừa những lỗi, giúp người lập trình làm thế nào để phòng ngừa lỗi, tìm ra lỗi.

File đính kèm:

  • docgiao_trinh_co_so_du_lieu_apache_php_mysql.doc