Đề tài Tìm hiểu công nghệ mysql và php

Tài liệu Đề tài Tìm hiểu công nghệ mysql và php: Chương 1 DẪN NHẬP Trong bối cảnh ngành công nghệ thông tin phát triển nhanh chóng như hiện nay, việc tạo một trang Web động không còn là vấn đề khó khăn như trước đây nữa. Các công nghệ thiết kế Web ngày càng được nâng cấp chất lượng và hoàn thiện hơn để tạo mọi hỗ trợ tối đa cho các nhà lập trình và thiết kế Web. Hiện nay, trên thị trường có rất nhiều công nghệ dùng để thiết kế những trang Web động, hai trong số các công nghệ đó được các nhà lập trình chú ý nhiều nhất như là ASP của Microsoft, JSP của hãng Sun. Hai công nghệ này hiện đang được phổ biến rất rộng rãi ở Việt Nam, bạn có thể dễ dàng đăng ký học và nghiên cứu ASP và JSP bất cứ khi nào bạn muốn. Nhưng xu thế thiết kế những trang Web động hiện nay trên thế giới lại nghiên về một công nghệ khác, không phải ASP hay JSP mà chính là công nghệ MySQL và PHP. Có rất nhiều ưu điểm của MySQL ...

doc62 trang | Chia sẻ: hunglv | Lượt xem: 1225 | Lượt tải: 0download
Bạn đang xem trước 20 trang mẫu tài liệu Đề tài Tìm hiểu công nghệ mysql và php, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Chương 1 DẪN NHẬP Trong bối cảnh ngành công nghệ thông tin phát triển nhanh chóng như hiện nay, việc tạo một trang Web động không còn là vấn đề khó khăn như trước đây nữa. Các công nghệ thiết kế Web ngày càng được nâng cấp chất lượng và hoàn thiện hơn để tạo mọi hỗ trợ tối đa cho các nhà lập trình và thiết kế Web. Hiện nay, trên thị trường có rất nhiều công nghệ dùng để thiết kế những trang Web động, hai trong số các công nghệ đó được các nhà lập trình chú ý nhiều nhất như là ASP của Microsoft, JSP của hãng Sun. Hai công nghệ này hiện đang được phổ biến rất rộng rãi ở Việt Nam, bạn có thể dễ dàng đăng ký học và nghiên cứu ASP và JSP bất cứ khi nào bạn muốn. Nhưng xu thế thiết kế những trang Web động hiện nay trên thế giới lại nghiên về một công nghệ khác, không phải ASP hay JSP mà chính là công nghệ MySQL và PHP. Có rất nhiều ưu điểm của MySQL và PHP đáng để chúng ta lưu tâm đến và sử dụng chúng, nhưng vấn đề khó khăn của các nhà lập trình Web tương lai tại Việt Nam là cách thức tiếp cận với hai công nghệ này. Nếu nắm bắt kịp công nghệ nêu trên, nghĩa là chúng ta đã theo kịp tốc độ phát triển công nghệ của thế giới và cùng hoà vào dòng chảy của các công nghệ tiên tiến nhất hiện nay. Cũng giống như ASP và JSP, công nghệ MySQL và PHP sẽ được giảng dạy rộng rãi trong các khoá học thiết kế Web động, sách viết về chúng sẽ được dịch chuyển sang tiếng việt và bày bán trong nhà sách, … nhưng đó là trong tương lai. Còn như hiện nay, công nghệ mới này vẫn còn đang xa lạ và mới mẻ đối với giới sinh viên, những cử nhân, kỹ sư công nghệ thông tin tương lai. Chính vì thế chúng tôi chọn đề tài “Tìm Hiểu Công Nghệ MySQL và PHP “ để làm Luận văn tốt nghiệp, mặt khác cũng là để nâng cao sự hiểu biết của mình, mở ra một tầm nhìn mới về lĩnh vực tạo trang Web, hoà nhập vào sự tiến bộ của thế giới. MySQL là một hệ quản trị cơ sở dữ liệu quan hệ, PHP là ngôn ngữ kịch bản trên máy chủ dùng để thiết kế trang Web. Để tạo dữ liệu động cho một trang Web, chúng ta cần phải kết hợp giữa một hệ quản trị cơ sở dữ liệu với một ngôn ngữ tạo Web. Sự kết hợp tuyệt vời giữa MySQL và PHP khiến cho chúng ngày càng được sử dụng rộng rãi hơn. Nghĩa là công nghệ này đã tạo được sự hỗ trợ tối đa cho các nhà lập trình Web. Cũng có nghĩa là PHP hỗ trợ tối đa các hàm để thao tác với dữ liệu của MySQL, kết nối cơ sở dữ liệu dễ dàng, tương tác dữ liệu nhanh chóng và đơn giản. Luận văn này đề cập đến phần lý thuyết về cách thức hoạt động cũng như cách thức tạo một cơ sở dữ liệu bằng hệ quản trị cơ sở dữ liệu MySQL, cách thức tương tác và kết nối giữa MySQL và PHP để thiết lập một trang web động bằng ngôn ngữ PHP. Đề tài được trình bày gọn trong 5 chương sau: Chương 1: Dẫn nhập. Chương 2: Khảo sát các công nghệ. Chương 3: Tìm hiểu về MySQL và PHP. Chương 4: Hiện thực ứng dụng quản lý xuất nhập Tân Dược cho công ty xuất nhập khẩu y tế TP Hồ Chí Minh - Yteco. Chương 5: Kết luận và hướng phát triển đề tài. Nội dụng chính của chương 2 sẽ là những đánh giá và so sánh giữa các hệ quản trị cơ sở dữ liệu như Access, SQL Server, Oracle với MySQL, đánh giá và so sánh giữa các công nghệ thiết kế Web động phổ biến hiện nay như ASP, JSP, Coldfusion với PHP, so sánh giữa các các web server như PWS, IIS, Jrun và Apache, và sau cùng là nêu những ưu điểm của hệ quản trị cơ sở dữ liệu MySQL, ưu điểm của PHP, cùng với cách thức hoạt động giữa MySQL – PHP thông qua một web server ví dụ như là Apache. Phần lý thuyết về tìm hiểu công nghệ sẽ được trình bày gói gọn trong chương 3. Ở đây chỉ nêu sơ lược một vài khái niệm chính về cách thức hoạt động của MySQL như các câu lệnh thao tác trên cơ sở dữ liệu, các câu lệnh thao tác trên dữ liệu, các phân quyền truy xuất, và một số tiện ích khác của MySQL. Đoạn cuối của chương 3 này sẽ là các khái niệm cơ bản về công nghệ PHP, cách thức cài đặt, và các loại hàm mà PHP hỗ trợ. Các cách thức để tạo một kết nối đến cơ sở dữ liệu cũng sẽ được chỉ ra cùng với cách lấy mẫu tin và cập nhật mẫu tin vào trong cơ sở dữ liệu cũng sẽ được trình bày ở dạng tóm lược thông qua các đoạn code ví dụ rất đơn giản. Vì mục đích chính của đề tài chỉ nhằm tìm hiểu công nghệ MySQL và PHP nên việc tạo một ứng dụng chỉ nhằm mục đích là thể hiện sự nghiên cứu và tìm hiểu công nghệ đã được nêu bên trên mà thôi. Phạm vi của ứng dụng là xây dựng hệ thống quản lý xuất nhập trên mạng Internet thông qua trang Web của công ty Xuất Nhập Khẩu Y Tế Tp Hồ Chí Minh. Trang Web gồm hai mảng chính là phần dành cho khách truy cập và phần dành cho các nhân viên của công ty truy cập để thực hiện các giao dịch của công ty, đó cũng chính là ý nghĩa chung của chương 4. Nội dung của chương 4 sẽ trình bày về hiện trạng của ứng dụng, các bước phân tích thiết kế dữ liệu, phân tích thiết kế xử lý, sơ đồ trang Web, hình ảnh của trang chủ cùng với một số trang cấp một. Phần cuối cùng của đề tài được trình bày trong chương 5 sẽ nêu lên một số kết luận, các đánh giá ưu khuyết điểm của đề tài, hướng phát triển của đề tài, các tài liệu tham khảo. Chương 2 TÌM HIỂU CÁC CÔNG NGHỆ Sử dụng các hệ quản trị cơ sở dữ liệu Hệ quản trị cơ sở dữ liệu Access Access là một hệ quản trị cơ sở dữ liệu gọn nhỏ và linh động. Tuy nhiên, khi đứng cạnh các hệ quản trị cơ sở dữ liệu mạnh như hiện nay, Access vẫn còn là một hệ quản trị cơ sở dữ liệu được ưa chuộng nhất. Bởi sự dễ dàng khi thực hiện các thao tác, dễ sử dụng, dễ cài đặt, dễ học và còn nhiều ưu điểm khác nữa khiến cho ngôn ngữ này ngày càng mang tính phổ biến. Một ưu điểm nữa của Access là bạn không phải mất công cài đặt nó lên máy tính, nó được hỗ trợ mặc định trong bộ Office của MicroSoft. Nhưng khi chọn một hệ quản trị cơ sở dữ liệu cho việc quản lý đặt nặng tính bảo mật thì Access lại không là một ứng cử viên sáng giá bởi bản thân nó mang tính bảo mật không cao. Hoặc khi chọn một hệ thống quản lý dữ liệu phân bố, bản thân Access lại không đáp ứng được cho các yêu cầu này. Khi lượng dữ liệu trở nên quá lớn, mọi thao tác trên dữ liệu đều có tốc độ chậm hẳn đi, điều này khiến cho chúng ta gặp nhiều khó khăn hơn trong công việc. Thay vào những khuyết điểm trên, Access lại có khả năng tương thích cao với các hàm gởi truy vấn dữ liệu của ODBC và ngay cả JDBC nữa. Chỉ cần cung cấp một đường dẫn đến tập tin cơ sở dữ liệu cho trình điều khiển là bạn đã có thể kết nối Access với một ngôn ngữ kịch bản tạo Web động như ASP, JSP hay thậm chí với cả PHP và PERL nữa. Tóm lại, chỉ nên chọn Access để quản lý dữ liệu cho các trang Web có số lượng mẫu tin ít, dữ liệu không cần ràng buột chi tiết, và đặc biệt là dành cho các trang sử dụng dữ liệu không đặt nặng vấn đề bảo mật và không có sự phân bố dữ liệu trên mạng. Hệ quản trị cơ sở dữ liệu SQL SERVER Tương tự như Access, SQL Server là một hệ quản trị cơ sở dữ liệu sử dụng ngôn ngữ truy vấn có cấu trúc chuẩn SQL, một hệ quản trị cơ sở dữ liệu quan hệ rất mạnh. Việc hỗ trợ tính phân bố dữ liệu và tính bảo mật dữ liệu cao làm cho SQL Server ngày càng tiến xa hơn nữa và trở thành một trong những chọn lựa hàng đầu khi cần một hệ thống quản lý dữ liệu an toàn. Nhưng SQL Server lại không hề đơn giản chút nào trong việc cài đặt nó vào máy của bạn, nó không tích hợp được với bất kỳ hệ điều hành nào khác ngoại trừ các hệ điều hành Windows của Microsoft. Ngoài ra, nếu khối lượng dữ liệu quá lớn từ khoảng 50 GB trở lên thì SQL Server lại trở nên chậm chạp và không còn thích hợp nữa cho dù chúng ta thực hiện một truy vấn dữ liệu không điều kiện. Hệ quản trị cơ sở dữ liệu ORACLE Một lựa chọn khác để quản lý, chia sẻ và truy vấn dữ liệu là sử dụng hệ quản trị cơ sở dữ liệu Oracle. Phiên bản Oracle mới nhất hiện nay là Oracle 9i, được hỗ trợ tối đa các hàm tiện ích giúp chúng ta có thể tạo các truy vấn chính xác và mang tính bảo mật cao. Không như SQL Server, Oracle 8i có thể thao tác trên một lượng dữ liệu rất lớn với khoảng thời gian chấp nhận được (nhiều hơn 50 GB dữ liệu) và cho bạn một kết quả như mong muốn. Ngoài ra, bạn có thể cài Oracle vào các hệ điều hành khác ngoài Windows như Unix và Linux một cách dễ dàng vì chúng được thiết kế để tương thích với mọi hệ điều hành. Mặc dù được mệnh danh là hệ quản trị cơ sở dữ liệu mạnh nhất hiện nay, nhưng người sử dụng lại gặp phải khá nhiều vấn đề khó khăn khi tiếp cận với Oracle. Vấn đề khó khăn đầu tiên là chi phí để trả cho một bản quyền đầy đủ. Nếu không, chúng ta sẽ khó lòng mà có được những điều mình mong muốn. Vì các lý do trên, Oracle chỉ thích hợp để quản lý những cơ sở dữ liệu lớn, có nhu cầu về sự phân bố dữ liệu trên mạng và cần có độ an toàn cao cho dữ liệu. Nếu bạn cần chọn một hệ quản trị cơ sở dữ liệu linh động, gọn nhẹ, chi phí thấp và dễ sử dụng để quản lý dữ liệu, bạn không nên chọn Oracle, có một giải pháp mới dành cho bạn, đó là hệ quản trị cơ sở dữ liệu quan hệ MySQL. Các ưu điểm nổi bật của MySQL Đối thủ chính của MySQL là Microsoft SQL Server và Ocracle, nhưng bản thân MySQL lại có nhiều điểm mạnh khiến nó đáng được quan tâm như: Tính thực thi cao: MySQL thực thi nhanh và rất đáng tin cậy để chúng ta sử dụng. Sự kết nối tốc độ và bảo mật làm MySQL phù hợp cho việc truy cập cơ sở dữ liệu trên Internet. Chi phí thấp: MySQL miễn phí với bản quyền mã nguồn mở hoặc chi phí thấp với bản quyền thương mại mà ứng dụng chúng ta cần. Sử dụng: Hầu hết mọi cơ sở dữ liệu hiện nay đều dùng ngôn ngữ truy vấn có cấu trúc chuẩn SQL. Nếu bạn đã từng sử dụng một hệ quản trị cơ sở dữ liệu quan hệ RDBMS thì bạn sẽ không gặp rắc rối gì khi sử dụng MySQLvà chúng cũng rất dễ cài đặt cấu hình. Tính linh động: MySQL tương thích với nhiều hệ điều hành khác nhau như UNIX cũng như Microsoft Windows. Mã nguồn: Bạn có thể lấy mã nguồn của MySQL một cách dễ dàng và sửa đổi chúng theo ý thích của bạn. Trình kết nối cơ sở dữ liệu ODBC ODBC – Open DataBase Connectivity - là một chương trình giao tiếp lập trình chuẩn cho người phát triển ứng dụng và nhà cung cấp cơ sở dữ liệu của Microsoft. Để truy xuất đến các cơ sở dữ liệu thông qua ODBC, ta phải cài đặt Driver đến cơ sở dữ liệu đó. ODBC có nhiều Driver hỗ trợ cho các cơ sở dữ liệu khác nhau, để chuyển các mẩu tin thành những dữ liệu nguồn (Data Source). Hệ điều hành căn cứ vào các thông tin khai báo để xác định cấp của ODBC Driver giao tiếp với Data Source. Việc nạp ODBC là “trong suốt” đối với chương trình ứng dụng. Trong môi trường mạng, ODBC đảm nhận luôn cả việc xử lý những vấn đề truy xuất dữ liệu trên mạng như việc truy cập đồng thời, giải quyết các xung đột, … Vì ODBC cung cấp sự truy xuất bất kỳ dạng cơ sở dữ liệu thông dụng có sẵn nên tạo một sự uyển chuyển trong ứng dụng, từ đó giúp chúng ta đưa cơ sở dữ liệu lên trang Web một cách dễ dàng. Nếu bạn có thể dùng ODBC với Web Server, tức là bạn có thể lấy dữ liệu từ cơ sở dữ liệu và đưa lên trang Web bất kể dữ liệu đó được lưu trữ trên môi trường nào. JDBC JDBC - Java Database Connectivity - tương tự như ODBC, là một giao thức để kết nối đến cơ sở dữ liệu, gởi các hàm truy vấn SQL và nhận dữ liệu trả về. Công nghệ JDBC còn là giao thức độc lập của Java API, nó cung cấp tập hợp các lớp và giao diện cho phép phát triển các ứng dụng Java cũng như các ứng dụng Web liên quan đến truy xuất cơ sở dữ liệu. Có bốn loại trình điều khiển JDBC được hãng Sun cung cấp như : Cầu nối ODBC – JDBC: Cầu nối này thực hiện việc truy cập đến cơ sở dữ liệu thông qua trình điều khiển ODBC của Windows. Loại trình điều khiển này thường dùng khi không có sẵn JDBC kết nối trực tiếp vào cơ sở dữ liệu quan hệ. Trình điều khiển thuần tuý Java – Native API: Trình điều khiển này hoạt động bằng cách biến đổi lệnh JDBC thành cuộc gọi trực tiếp đến cơ sở dữ liệu. Điều này làm cho trình điều khiển trở nên tiện lợi và nhanh hơn các trình điều khiển khác. Tuy nhiên không phải cơ sở dữ liệu nào cũng cung cấp cho bạn cách giao tiếp thông qua JDBC – API trực tiếp. Trình điều khiển JDBC – NET: Trình điều khiển này là giải pháp cho mô hình dữ liệu đa tầng. Máy chủ server sẽ dịch các nghi thức độc lập của JDBC thành nghi thức cụ thể của hệ quản trị cơ sở dữ liệu. Trình điều khiển Native Protocol: Đây là loại trình điều khiển thuần tuý Java, nó sẽ giao tiếp trực tiếp với cơ sở dữ liệu của nhà cung cấp. Có bốn bước cần thực hiện khi sử dụng trình điều khiển để kết nối đến cơ sở dữ liệu như: Tạo một thiết lập kết nối với cơ sở dữ liệu, gởi câu lệnh SQL, xử lý kết quả và đóng kết nối. Sự hỗ trợ của Server đối với các ngôn ngữ kịch bản Bước đầu tiên bạn cần thực hiện khi bắt đầu thiết kế hay lập trình Web là bạn phải cài một Web Server cùng với một ngôn ngữ kịch bản chạy trên server mà bạn muốn sử dụng. Bạn cần cài đặt một trong bốn loại Web Server thông dụng nhất hiện nay, sẽ được giới thiệu bên dưới đây, tuỳ theo cấu hình máy của bạn. Personal Web Server - PWS Đây là loại Web server thường dùng trên hệ điều hành Win9x, NT Workstation hay Win 2000 Workstation. Cấu hình này thường được dùng cho các nhà lập trình Web trong thời gian thiết kế. Web server này sẽ nhận các yêu cầu, tìm trang cần thiết, chạy kịch bản, liên kết với dữ liệu và trả về các trang đáp ứng. Ưu điểm của PWS là nó cung cấp một môi trường phát triển tiện lợi, chi phí thấp và không cần phần cứng mạnh. Tuy nhiên, nhược điểm của nó là có độ tin cậy không cao và không thể mở rộng trang Web ra nhiều Server. Internet Information Server – IIS Web server này dùng để cấu hình server trên nền hệ điều hành NT Server và Win 2000 Server, cấu hình này được dùng để triển khai các hệ thống trên qui mô lớn nên nó đòi hỏi nhiều tài nguyên của máy cũng như cấu hình máy phải mạnh. Ưu điểm của cấu hình NT Server/IIS là mang lại độ tin cậy cao và cho phép mở rộng trang Web ra nhiều server, nhưng nhược điểm của nó là cần chi phí cao hơn so với cấu hình Win9x/PWS. JRUN Đây là trình chủ Web có khả năng hiểu Java do hãng Allaire cung cấp nhằm phục vụ những phiên bản của hãng Sun Microsystem dựa trên nền Java, nó có khả năng thích ứng tốt với nhiều hệ điều hành như Win9x, Windows 2000, Windows NT, Linux và Unix. Ngoài những tính năng của một trình chủ Web, JRUN còn có khả năng liên kết với các trình chủ khác như IIS và Apache. Các yêu cầu về phần cứng cũng như phần mềm khi tạo trình chủ Web JRUN khiến cho JRUN trở nên phức tạp khi cài đặt và quản lý, đây cũng là một nhược điểm của JRUN. APACHE Trình chủ Web Apache là trình chủ phổ biến nhất hiện nay trên thế giới, nó hiện đang quản lý hơn 50% số trang Web hiện có trên thế giới, nhiều hơn cả số trang mà PWS, IIS và JRUN hiện đang quản lý. Vì thế, Apache có nhiều ưu điểm đáng để chúng ta quan tâm và lưu ý đến nó. Cũng giống như JRUN, Apache có khả năng thích ứng tốt với nhiều hệ điều hành, nhưng một điểm khác với JRUN là nó không yêu cầu về cấu hình của máy khi cài đặt và các thao tác cài đặt lại vô cùng dễ dàng. Các ngôn ngữ kịch bản trên Server Hiện nay, nếu bạn muốn tạo một trang Web động, không còn cách nào khác là bạn phải sử dụng một ngôn ngữ kịch bản chạy trên Server để liên kết với một trình điều khiển kết nối cơ sở dữ liệu. Các ngôn ngữ kịch bản chạy trên server thông dụng nhất hiện nay gồm bốn loại sau: Active Sserver Pages - ASP ASP là một ngôn ngữ kịch bản chạy trên server, được hỗ trợ mặc định trong trình duyệt IE 4.0. ASP thực sự là phần mở rộng cho Web server của bạn. Nó cung cấp một tập hợp các thành phần và các đối tượng đặc trưng để quản lý sự tương tác giữa Web server và trình duyệt. Một khuyết điểm của ASP khiến cho nhiều người không thích sử dụng ASP chính là khả năng bảo vệ mã nguồn của ASP (có nhiều người cho đây là ưu điểm của nó) và sự tăng tải trên server. Nhưng bù lại, ASP có khả năng thích ứng rộng, khả năng kết hợp với các phần mềm khác cao và tính dễ gỡ rối. Java Server Pages – JSP JSP là một kỹ thuật mới kết hợp ngôn ngữ đánh dấu HTML (hoặc XML) với Java để tạo các trang Web động. Cũng như Java, JSP là ngôn ngữ lập trình hướng đối tượng thuần tuý và tối ưu. Một trong những ưu điểm chính của JSP là tính khả chuyển của mã nguồn giữa các server với nhau, và tính mã nguồn mở. ColdFusion ColdFusion cho phép server truy xuất cơ sở dữ liệu khi tạo Web. Trang Web tạo bởi ColdFusion ( tập tin .cfm) có thể đọc được bởi mọi trình duyệt, tuy nhiên nó sử dụng các thẻ của riêng nó. Điểm khác nhau cơ bản giữa ColdFusion và các ngôn ngữ khác đó là nó sử dụng các thẻ riêng của nó thay vì sử dụng các đối tượng và các ngôn ngữ kịch bản phía Client. Personal Home Page – PHP Tương tự như ASP và ColdFusion, PHP là ngôn ngữ dùng để tạo các trang Web động từ server và gởi chúng tới trình duyệt. Tuy nhiên, PHP tương thích với nhiều hệ điều hành hơn, và cũng tương thích với nhiều Web server hơn các ngôn ngữ khác. Các điểm mạnh của PHP bao gồm: Tính thực thi cao: PHP rất hiệu quả, sử dụng server rẻ, bạn có thể đáp ứng hàng triệu lượt truy cập mỗi ngày vào trang Web của bạn. Mạch ghép nối đến nhiều hệ thống cơ sở dữ liệu khác nhau: PHP kết nối đến nhiều hệ thống cơ sở dữ liệu. Ngoài MySQL ra bạn còn có thể kết nối được với các hệ quản trị cơ sở dữ liệu khác như: PostgreSQL, mSQl, Ocracle, dbm, filePro, Hyperwave, Infomix, InterBase, và Sybase. Dùng ODBC (Open Database Connectivity Standard) bạn có thể kết nối đến bất kỳ cơ sở dữ liệu nào có hỗ trợ ODBC driver bao gồm các sản phẩm của Microsoft và nhiều hãng khác. Xây dựng thư viện cho nhiều tác vụ Web thông dụng: Do PHP được thiết kế cho việc sử dụng Web nên nó có nhiều chức năng được xây dựng để thực thi nhiều tác vụ quan hệ Web hữu dụng. Bạn có thể thao tác trên hình ảnh GIF, kết nối với những dịch vụ mạng khác, gởi mail, làm việc với cookie và tạo tài liệu PDF. Chi phí thấp: PHP thì miễn phí. Bạn có thể tải miễn phí phiên bản mới nhất tại Web site: . Dễ học và dễ sử dụng: Cú pháp của PHP dựa trên các ngôn ngữ lập trình khác, chủ yếu là C và Perl. Nếu bạn đã biết C hay Perl hay một ngôn ngữ giống C như C++ hay Java thì bạn sẽ sử dụng PHP được ngay. Linh hoạt: PHP thích hợp cho nhiều hệ điều hành khác nhau. Bạn có thể viết mã trên hệ điều hành Unix, Linux và FreeBSD, phiên bản Unix thương mại, Solaris và IRIX hay trên những phiên bản của Microsoft Windows giống nhau. Mã nguồn: Bạn đã truy cập mã nguồn PHP. Không giống như trong thương mại hay những sản phẩm mã nguồn đóng, bạn có thể tự do sửa đổi hay thêm gì đó vào PHP và cũng không cần lo lắng về việc nhà sản xuất ngừng hỗ trợ. Công nghệ MySQL và PHP Đây cũng chính là sự kết hợp tuyệt vời giữa hai công nghệ đang được ưa chuộng nhất hiện nay trên thế giới. Một bộ đôi có nhiều điểm chung giống nhau như độc lập với hệ điều hành, mã nguồn mở, tiết kiệm chi phí, … Sự hỗ trợ tối đa các loại hàm trong PHP đối với MySQL làm cho mọi thao tác trên dữ liệu trở nên nhanh chóng, phù hợp với xu thế thiết kế Web hiện nay là ưu tiên cho tốc độ lấy dữ liệu. Sơ đồ làm việc giữa PHP và MySQL thông qua trình duyệt Web được minh hoạ như hình dưới đây: Sơ đồ làm việc giữa PHP và MySQL với trình duyệt Web Có 6 bước làm việc bao gồm Bước 1 : Khi một địa chỉ Web được gọi thì trình duyệt Web sẽ gởi yêu cầu cho Apache. Bước 2 : Apache nhận yêu cầu đó và chuyển cho PHP xử lý. Bước 3 : Ngôn ngữ kịch bản PHP gồm các câu lệnh PHP , chẳng hạn như lệnh gọi kết nối cơ sở dữ liệu và truy xuất dữ liệu … Bước 4 : Dữ liệu được lấy lên từ cơ sở dữ liệu và và kịch bản PHP sẽ làm một số việc định dạng dữ liệu. Bước 5 : Sau đó gởi trở về cho Apache. Bước 6 : Apache gởi đến trình duyệt các yêu cầu đã được đáp ứng. Lúc này chúng ta sẽ thấy một số thông tin được lấy từ cơ sở dữ liệu. Chương 3 TÌM HIỂU VỀ MYSQL VÀ PHP Tìm hiểu về MySQL Giới thiệu về MySQL MySQL là một hệ quản trị cơ sở dữ liệu quan hệ mạnh mẽ và tốc độ. MySQL cho phép bạn lưu trữ, tìm kiếm, sắp xếp và lấy dữ liệu rất hiệu quả và nhanh chóng. Cơ sở dữ liệu chủ MySQL điều khiển việc truy cập dữ liệu, cho phép nhiều người dùng cùng truy cập đồng thời mà an toàn và nhanh chóng. Do đó MySQL trở thành một hệ quản trị cơ sở dữ liệu chủ đa người dùng và đa luồng. Nó sử dụng ngôn ngữ truy vấn có cấu trúc SQL, là ngôn ngữ truy vấn cơ sở dữ liệu chuẩn trên thế giới hiện nay. MySQL trở nên phổ biến từ những năm 1996 nhưng lịch sử phát triển của nó đã bắt nguồn từ những năm 1979. MySQL là phần mềm có mã nguồn mở, bạn có thể download phần mềm miễn phí trên Internet từ địa chỉ : và bạn hoàn toàn có thể học mã nguồn, thay đổi mã nguồn để sử dụng theo mục đích riêng của bạn. Nếu vẫn chưa đáp ứng đủ, hay khi bạn cần nhúng MySQL vào một ứng dụng thương mại nào đó thì bạn có thể mua một phiên bản thương mại từ công ty. Cách cài đặt MySQL Cài đặt MySQL trên Windows 9x : Thư mục chính chứa MySQL sau khi cài mặc định sẽ là c:\mysql. Sau khi chạy tập tin setup.exe, chúng ta bắt đầu khởi động MySQL trên Windows bằng cách vào Start -> Run và gõ lệnh: c:\mysql\bin\mysql-opt Hoặc chúng ta shut down MySQL bằng cách thực thi dòng lệnh sau : c:\mysql\bin\mysqladmin -u root shutdown Cài đặt MySQL trên Windows NT/Windows 2000 : Tùy thuộc vào việc chúng ta chạy MySQL trên Windows NT hay trên Windows 2000 có một số các vấn đề khác nhau không đáng kể. Khi cài đặt trên Windows NT hay trên Windows 2000 thì tên server là mysqld-nt và nó không được cài đặt bình thường giống như các service khác. Chúng ta có thể cài đặt trên server như sau: C:\mysql\bin\mysqld-nt -install Sau đó chúng ta khởi động MySQL bằng cách gõ dòng lệnh sau : NET START mysql Để thoát khỏi hệ thống, ta dùng câu lệnh sau: NET STOP mysql Sau khi cài đặt xong ta có thể vào Service Control Manager (tìm trong Control Panel) để kiểm tra xem MySQL ở trạng thái started chưa. Để kiểm tra xem MySQL có làm việc hay không ta chạy một số lệnh sau: C:\mysql\bin\mysqlshow C:\mysql\bin\mysqlshow –u root mysql C:\mysql\bin\mysqladmin version status proc C:\mysql\bin\mysqladmin –u root shutdown MySQL sẽ tạo cơ sở dữ liệu gồm mysql và test. Cơ sở dữ liệu mysql được sử dụng để lưu trữ sự phân quyền và truy cập trên server. Đăng nhập vào hệ thống MySQL Để log vào MySQL, trước tiên bạn cần khởi động MySQL server bằng cách vào Start -> Run gõ dòng lệnh như sau: NET START mysql Biểu tượng đèn tín hiệu “giao thông” của MySQL server ở góc phải màn hình sẽ bật lên màu xanh để báo hiệu cho bạn biết MySQL server đã sẵng sàng. Nếu không có dấu hiệu này, bạn hãy xem lại cách cài đặt của mình đã đúng chỉ dẫn hay chưa. Sau đó bạn vào Start -> Run và nhập tiếp dòng lệnh sau để Log vào MySQL server : C:\mysql\bin\mysql –h hostname –u username –p password Với vị trí hostname, bạn cần nhập vào tên host đang chạy MySQL mà bạn muốn kết nối đến. Với vị trí username, bạn cần nhập vào tên tài khoản người sử dụng mà người quản trị hệ thống thiết lập riêng cho ban. Nếu bạn đang sử dụng máy riêng của mình, bạn có thể để trống phần này, MySQL server sẽ lấy giá trị mặc định là tên tại khoản đã đăng ký với hệ điều hành. Trong phần password, bạn cần nhập vào đúng mật khẩu được chỉ định đi kèm với username. Vì lý do bảo mật, một lời khuyên dành cho bạn là không nên nhập mật khẩu vào đây, vì mật khẩu của bạn sẽ hiện nguyên từng ký tự một khi bạn gõ vao. Chính vì thế bạn nên bỏ trống phần này, MySQL server sẽ tự động hỏi bạn mật khẩu với dòng hỏi và bạn hãy nhập mật khẩu vào. Nếu thành công, bạn sẽ có một lời chào như sau: Wellcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 to server version : 3.23.47-nt Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer. mysql> _ Nếu không có một đáp trả nào tương tự, bạn hãy xem lại cách cài đặt MySQL của bạn hay xem lại bạn đã nhập đúng mật khẩu hay chưa. Dấu nhắc dòng lệnh sẽ khác nhau tuỳ thuộc vào hệ điều hành và môi trường bạn sử dụng MySQL. Chú ý : Bạn bắt buột phải dùng dấu chấm phẩy ( ; ) để kết thúc dòng lệnh trong MySQL. Định danh trong MySQL Qui tắc định danh rất đơn giản, gồm một số qui tắc như sau: Không dùng ký tự có mã ASCII(0) và mã ASCII(255) để định danh cho các loại đối tượng(như tên bảng, tên cột, tên database, tên alias,…) Nếu trong định danh có khoảng trắng thì định danh phải được đặt trong cặp dấu nháy đơn ( ‘ ’ ), trường hợp này chỉ dùng cho các phiên bản MySQL 3.23.6 trở lên. Các phiên bản MySQL 3.23.6 trở xuống không được dùng khoảng trắng khi định danh các đối tượng kể cả khi định danh được đặt trong cặp dấu nháy đơn ( ‘ ‘ ). Các trường hợp khác để định danh cho mọi đối tượng trong MySQL phải tuân theo nguyên tắc sau: Đối tượng cần định danh Chiều dài tối đa Trường hợp tương tự Ký tự được dùng Cơ sở dữ liệu 64 Cách định danh cho một thư mục trong hệ điều hành Mọi ký tự cho phép ngoại trừ ký tự “/” Bảng 64 Cách định danh cho một tập tin trong hệ điều hành Mọi ký tự cho phép ngoại trừ ký tự “/” và dấu “.” Cột 64 Không có Mọi ký tự Bí danh 255 Không có Mọi ký tự Quản trị cơ sở dữ liệu trong MySQL Vấn đề phân quyền và người dùng Mỗi hệ thống MySQL có thể có nhiều người sử sụng đồng thời. Vì lý do bảo mật nên người quản trị hệ thống cần phải bảo vệ tài khoản và mật khẩu truy cập vào root. Khi có một người dùng khác cần sử dụng hệ thống, người quản trị cần cấp cho người dùng này một tài khoản và mật khẩu riêng để log vào hệ thống. Ngoài ra cần phải cấp cho người này một số quyền tối thiểu để thực hiện một vài thao tác. Các quyền này dùng để xác định những điều gì người dùng này có thể làm được và những gì không thể làm được. Hệ thống phân quyền của MySQL gồm các cấp độ như sau: Toàn quyền sử dụng Các quyền trên cơ sở dữ liệu Quyền trên các bảng (table) Quyền trên các cột Các cấp độ phân quyền được chia thành hai nhóm quyền như : nhóm các quyền cho người dùng và nhóm các quyền dùng để quản trị. Phần chi tiết về các cấp độ phân quyền như sau: Phân quyền nhóm người dùng: Bạn chỉ nên cấp cho người dùng các quyền trên cơ sở dữ liệu, trên các bảng (table) hoặc trên các cột (column) như sau: Phạm vi áp dụng Cấp quyền Mô tả Cơ sở dữ liệu CREATE Tạo một cơ sở dữ liệu mới DROP Xoá cơ sở dữ liệu Bảng (table) SELECT Cho phép lấy các mẫu tin trong bảng INSERT Thêm một dòng mới vào các bảng UPDATE Câp nhật mới các giá trị của bảng DELETE Xoá một bảng INDEX Cho phép tạo và xoá các chỉ mục đặc biệt trong bảng ALTER Chỉnh sửa cấu trúc của bảng như đổi tên bảng CREATE Tạo một bảng mới DROP Xoá một bảng Cột (column) SELECT Cho phép lấy các mẫu tin trong cột INSERT Thêm một dòng mới vào cột UPDATE Cập nhật mới các giá trị trong cột Phân quyền nhóm quản trị hệ thống : Bạn có thể cấp các quyền này cho một người dùng đặc biệt nào đó để người này có thể quản lý hệ thống. Cấp quyền Mô tả RELOAD Cho phép được Reload SHUTDOWN Cho phép một nhà quản trị có thể tắt hệ thống MySQL server PROCESS Cho phép một nhà quản trị có thể xem các tiến trình xử lý trên server và ngăn chặn chúng. FILE Cho phép lấy dữ liệu từ các tập tin và đọc vào các bảng. Các quyền đặc biệt khác: người quản trị hệ thống có thể cấp các quyền tổng quát này cho một người dùng mới để tiết kiệm thời gian phân quyền chi tiết như: Cấp quyền Mô tả ALL hay ALL PRIVILEGES Cho phép một người dùng có toàn quyền trên mọi cơ sở dữ liệu, mọi bảng, mọi cột, kể cả nhóm quyền dùng để quản trị hệ thống. USAGE Khi một người dùng được cấp quyền này, người đó chỉ có thể đăng nhập (log) vào hệ thống mà không thể làm bất cứ điều gì khác, các quyền khác có thể được cấp sau (nếu có thể). Câu lệnh dùng để cấp quyền Bạn có thể dùng câu lệnh này để tạo một tài khoản và mật khẩu cho một người dùng mới và phân cho người này các quyền chi tiết để sử dụng trong hệ thống. Dạng tổng quát của câu lệnh này như sau: GRANT priveleges [columns] ON item TO user_name [ IDENTIFIED BY ‘password’] [ WITH GRANT OPTION ] Mô tả: priveleges : danh sách các quyền cần cấp (các quyền đã được mô tả ở trên) [columns] : phạm vi các quyền được sử dụng trên một cột cụ thể hay trên danh sách các cột (phần này có thể không cần cung cấp) . item : cung cấp tên cơ sở dữ liệu hoặc tên bảng mà các quyền mới cấp này áp dụng lên. Bạn có thể sử dụng các ký hiệu đặc biệt thay cho một danh sách cần cung cấp như sau: * Đại diện cho mọi cơ sở dữ liệu nằm trong hệ thống. *.* Đại diện cho mọi cơ sở dữ liệu và mọi bảng nằm trong hệ thống. dbname.* Cung cấp danh sách tất cả các bảng nằm trong cơ sở dữ liệu có tên dbname. dbname.tablename Chỉ định một bảng có tên dbname nằm trong cơ sở dữ liệu có tên dbname. user_name : Chỉ định tên một người dùng được cấp các quyền mới này. Nếu MySQL không tìm thấy tên user_name này trong danh sách các user của hệ thống MySQL thì hệ thống sẽ tự động tạo ra một user mới với tên user_name và cập nhật vào hệ thống. [ IDENTIFIED BY ‘password’] : Chỉ định mật khẩu đi kèm với tên user_name trên (phần này có thể không cần cung cấp). [ WITH GRANT OPTION] : Nếu câu lệnh cấp quyền có phần này, nghĩa là người có tên user_name ở trên có thể cấp lại các quyền này cho một người khác . Ghi chú: Danh sách tên người dùng và các quyền đã cấp cho người dùng sẽ được lưu trữ trong bốn bảng của cơ sỡ dữ liệu tên mysql. Bốn bảng này có tên là mysql.user, mysql.db, mysql.tables_priv, mysql.columns_priv. Bốn bảng này có quan hệ mật thiết với bốn cấp độ phân quyền như đã đề cập ở trên. Chính vì thế, bạn có thế chỉnh sửa câu lệnh GRANT bằng cách chỉnh sửa trực tiếp trên các bảng này. Câu lệnh dùng để rút quyền Để rút lại các quyền đã cấp cho một người dùng, bạn có thể dùng câu lệnh REVOKE dưới dạng tổng quát như sau: REVOKE priveleges [columns] ON item FROM user_name Mô tả: priveleges : danh sách các quyền cần rút lại (các quyền đã được cấp trước đó ) [columns] : phạm vi các cột hay trên danh sách các cột cần rút quyền (đã được cấp trước đó - phần này có thể không cần cung cấp) . item : cung cấp tên cơ sở dữ liệu hoặc tên bảng nằm trong phạm vi đã cấp quyền trước đó mà ta cần rút quyền. Chúng ta có thể sử dụng các ký hiệu đặc biệt (như phần câu lệnh GRANT đã mô tả) để thay cho một danh sách các cột cần cung cấp. user_name : Chỉ định tên người dùng cấn rút quyền. Nếu MySQL không tìm thấy tên user_name này trong danh sách các user của hệ thống MySQL thì hệ thống sẽ thông báo lỗi không tìm thấy user_name. Ngoài ra, nếu bạn cần rút lại quyền “cho phép người dùng cấp lại quyền của mình cho một người dùng khác”, thì bạn có thể dùng câu lệnh như sau: REVOKE GRANT OPTION ON item FROM user_name Lấy thông tin về cơ sở dữ liệu, bảng, cột, index Câu lệnh USE Sau khi đăng nhập vào MySQL, để thao tác trên một cơ sở dữ liệu nào đó, bạn sử dụng câu lệnh sau: mysql> use dbname; Với dbname là tên cơ sở dữ liệu mà bạn cần dùng đến. Nếu cơ sở dữ liệu này đã có, một dòng thông báo đáp trả của MySQL sẽ hiện như sau: Database changed Mysql> _ Một thông báo lỗi sẽ xuất hiện như bên dưới nếu MySQL không tìm thấy cơ sở dữ liệu tên dbname trong hệ thống cơ sở dữ liệu của MySQL hay nếu bạn không chọn một cơ sở dữ liệu trước khi bắt đầu mọi công việc, bạn cũng sẽ bị thông báo lỗi. Câu lệnh KILL Mỗi kết nối vào MySQL đều được thực hiện bằng một tuyến kết nối riêng biệt. Bạn có thể xem các tuyến đang thực hiện (đang chạy ) bằng câu lệnh SHOW PROCESSLIST và ngăn chặn chúng lại bằng câu lệnh câu lệnh KILL này. Nếu bạn được cấp quyền Process, bạn có thể thấy mọi tuyến và ngăn chặn chúng, nếu không có quyền đó, bạn chỉ có thể thấy được tuyến của mình và ngăn chặn nó. Cú pháp như sau : KILL thread_id Câu lệnh SHOW Câu lệnh này được dùng để mô tả nội dung bên trong của một đối tượng như cơ sở dữ liệu, các bảng, các cột ( tức là xem thông tin về cơ sở dữ liệu, các bảng hay các cột ) với cú pháp như sau : SHOW DATABASES [LIKE wild] or SHOW [OPEN] TABLES [FROM db_name] [LIKE wild] or SHOW COLUMNS FROM tbl_name [FROM db_name] [LIKE wild] or SHOW INDEX FROM tbl_name [FROM db_name] or SHOW TABLE STATUS [FROM db_name] [LIKE wild] or SHOW STATUS [LIKE wild] or SHOW VARIABLES [LIKE wild] or SHOW LOGS or SHOW [FULL] PROCESSLIST or SHOW GRANTS FOR user or SHOW CREATE TABLE table_name Show database: Xem danh sách các cơ sở dữ liệu có trong hệ thống cơ sở dữ liệu của MySQL. Kết quả sau khi dùng câu lệnh này như sau: Show tables: Xem danh sách tất cả các bảng có trong cơ sở dữ liệu hiện hành. Nếu trong cơ sở dữ liệu hiện hành không có bảng nào, bạn sẽ có thông báo như sau: mysql> show tables; Empty set ( 0.00 sec ) Bạn có thể dùng lệnh SHOW để xem danh sách các bảng có trong một cơ sở dữ liệu khác được chỉ định cụ thể, không phải cơ sỡ dữ liệu hiện hành. Dạng tổng quát cuả trường hợp này như sau: SHOW TABLES FROM database_name Show columns: Ngoài ra bạn cũng có thể dùng lệnh này để xem cấu trúc chi tiết của các cột trong một bảng cụ thể thuộc một cơ sở dữ liệu được chỉ định. SHOW COLUMNS FROM table_name FROM database_name Hoặc SHOW COLUMNS FROM database_name. Table_name Show index: Dùng để xem chi tiết tất cả các khoá trong một bảng cụ thể được chỉ ra trong cơ sở dữ liệu hiện hành. Dạng tổng quát của cách dùng này như sau: SHOW INDEX FROM table_name Dùng để xem chi tiết tất cả các khoá trong một bảng cụ thể nằm trong cơ sở dữ liệu chỉ định. SHOW INDEX FROM table_name FROM database_name Bạn có thể dùng từ KEYS để thay cho INDEX trong hai cách dùng trên, như: SHOW KEYS FROM table_name SHOW KEYS FROM table_name FROM database_name Show status: Câu lệnh này cho ta thông tin về một vài đặc điểm của hệ thống, như số lượng các tuyến đang chạy, … . Mệnh đề LIKE theo sau dùng để gắn tên của các đặc điểm của hệ thống cho ta dễ dàng theo dõi, ví dụ như , LIKE ‘Threads%’ có nghĩa kết quả sẽ là ‘Threads_catched’, ‘Threads_connected’, ‘Threads_running’, … . Dạng tổng quát của lệnh này như sau: SHOW STATUS [ LIKE status_item ] Show variables: Cung cấp cho ta danh sách tên và giá trị của các biến trong hệ thống các biến của MySQL. Mệnh đề LIKE theo sau dùng để gắn các tên các biến để ta dễ theo dõi như câu lệnh SHOW STATUS ở trên. SHOW VARIABLES [ LIKE variable_name ] Show processlist: Lệnh này dùng để hiển thị tất cả các tiến trình xử lý đang thực hiện, như các câu truy vấn . Hầu hết mọi người dùng đều thấy các tiến trình xử lý của mình, nhưng nếu được cấp quyền PROCESS (như đả mô tả ở phần phân quyền ), một người dùng có thể thấy được mọi tiến trình xử lý cuả mọi người khác, kể cả tên người dùng, mật khẩu, các truy vấn đang thực thi, … bằng cách sử dụng phần mở rộng FULL, dạng tổng quát như sau: SHOW [ FULL ] PROCESSLIST Show table status: Cung cấp các thông tin về mỗi bảng trong cơ sở dữ liệu hiện hành hoặc một cơ sở dữ liệu khác được chỉ ra trong phần mở rộng database_name, các thông tin đi kèm là loại bảng và ở mỗi bảng có các thông tin về lần cập nhật trước. SHOW TABLE STATUS [ FROM database_name ] Show grants: Câu lệnh này chỉ được sử dụng từ phiên bản 3.23.4 trở lên, nếu phiên bản MySQL của bạn cũ hơn thì bạn không thể dùng lệnh này được. Mục đích của câu lệnh này là cung cấp cho ta danh sách các quyền mà một người dùng có được trên cơ sở dữ liệu hiện hành, và đương nhiên, người sử dụng lệnh phải có cấp quyền cao hơn người dùng cần xem. Dạng tổng quát như sau: SHOW GRANTS FOR user_name Câu lệnh DESCRIBE Câu lệnh này được sử dụng để xem chi tiết cấu trúc của một bảng trong cơ sở dữ liệu hiện hành. Dạng tổng quát như sau: DESCRIBE | DESC tbl_name {col_name | wild} Giả sử cơ sở dữ liệu hiện hành là mysql, bạn muốn xem chi tiết cấu trúc của bảng func, kết quả trả về sẽ giống như sau: mysql> describe func; Field Type Null Key Default Extra name ret dl type Char(54) binary Tinyint(1) Char(128) Enum(‘function’,’aggregate’) PRI 0 function 4 rows in set ( 0.06 sec ) Nếu MySQL không tìm thấy tên bảng table_name trong cơ sở dữ liệu hiện hành, một thông báo lỗi sẽ xuất hiện: mysql> describe tablename; ERROR 1146 : Table ‘mysql.tablename’ doesn’t exist Câu lệnh BEGIN / COMMIT / ROLLBACK Mặc định, MySQL chạy trong chế độ autocommit. Nghĩa là khi bạn thực thi một câu lệnh cập nhật dữ liệu, MySQL sẽ thực hiện việc cập nhật dữ liệu của bạn lên đĩa ngay lập tức. Để thiết lập lại chế độ autocommit, bạn sử dụng câu lệnh sau: SET AUTOCOMMIT=0 Sau khi hoàn tất mọi công việc, bạn phải sử dụng lệnh COMMIT để lưu mọi sự thay đổi trong cơ sở dữ liệu vào đĩa, nếu không muốn lưu bạn có thể dùng lệnh ROLLBACK. Ví dụ như : mysql> USE thuoc_db; mysql> SET AUTOCOMMIT=0; mysql> SELECT @A:=SUM(soluong) FROM pn WHERE msthuoc=1; mysql> UPDATE thuoc SET soluong=@A WHERE msthuoc=1; mysql> COMMIT; //hay ROLLBACK Bạn cũng có thể dùng câu lệnh BEGIN hoặc BEGIN WORK để đặt huỷ bỏ chế độ autocommit thay vì dùng lệnh SET AUTOCOMMIT = 0. Ví dụ: mysql> BEGIN; //hay BEGIN WORK mysql> SELECT @A:=SUM(soluong) FROM pn WHERE msthuoc=1; mysql> UPDATE thuoc SET soluong=@A WHERE msthuoc=1; mysql> COMMIT; //hay ROLLBACK Câu lệnh LOCK TABLES / UNLOCK TABLES Lệnh LOCK TABLES dùng để khóa tất cả các bảng dữ liệu của tuyến kết nối hiện tại. Lệnh UNLOCK TABLES dùng để ‘mở khoá’ cho các bảng đã bị khóa trước đó bởi tuyến kết nối hiện tại, hoặc khi tuyến kết nối hiện tại bị huỷ thì các bảng đã bị khóa trước đó cũng sẽ được ‘mở khoá’. Cú pháp của câu lệnh này như sau: LOCK TABLES tbl_name [AS alias] {READ | [READ LOCAL] | [LOW_PRIORITY] WRITE} [, tbl_name {READ | [LOW_PRIORITY] WRITE} ...] ... UNLOCK TABLES Mục đích chính của câu lệnh là để giúp người sử dụng tránh được những rắc rối trong việc lấy dữ liệu và cập nhật dữ liệu khi bảng dữ liệu cũng có thể bị thao tác (lấy và cập nhật dữ liệu ) bởi một người dùng khác ở một tuyến làm việc khác. Câu lệnh CREATE INDEX Câu lệnh tạo chỉ mục này sẽ cho phép bạn tạo một cột chỉ mục trong một bảng đã có sẵn. Bạn cũng có thể tạo chỉ mục cho nhiều cột bằng cách cung cấp một danh sách tên các cột cần tạo chỉ mục cho câu lệnh tạo chỉ mục. Cú pháp như sau: CREATE [UNIQUE|FULLTEXT] INDEX index_name ON tbl_name (col_name[(length)],... ) Câu lệnh DROP INDEX Câu lệnh xoá chỉ mục này sẽ cho phép bạn xoá một cột chỉ mục trong một bảng đã có sẵn. Cú pháp như sau: DROP INDEX index_name ON tbl_name Câu lệnh CREATE FUNCTION / DROP FUNCTION Bạn có thể tự tạo riêng cho mình các hàm để sử dụng bằng câu lệnh tạo hàm giống như hàm nối chuỗi hay hàm tính tổng để tiện cho các công việc. Cú pháp hàm : CREATE [AGGREGATE] FUNCTION function_name RETURNS {STRING|REAL|INTEGER} SONAME shared_library_name Để xoá một hàm đã định nghĩa trước đó, ta dùng câu lệnh sau : DROP FUNCTION function_name Lưu ý rằng mọi giá trị trả về từ hàm sẽ không bị thay đổi khi hàm bị xoá đi bằng câu lệnh DROP FUNCTION. Các lệnh thao tác trên cơ sở dữ liệu Tạo cơ sở dữ liệu Để tạo một cơ sở dữ liệu, bạn phải cung cấp cho hệ thống tên của cơ sở dữ liệu (tham khảo thêm mục 5 ở trên: Định danh trong MySQL ) sau đó sử dụng câu lệnh tạo cơ sở dữ liệu với cú pháp đơn giản như sau: CREATE DATABASE [IF NOT EXISTS] dbname Nếu trong hệ thống không tồn tại một cơ sở dữ liệu nào trùng tên với cơ sở dữ liệu bạn vừa tạo, một thông báo lỗi sẽ xuất hiện. Nếu trong hệ thống đã tồn tại một cơ sở dữ liệu trùng tên với cơ sở dữ liệu bạn vừa tạo, một dòng thông báo lỗi sẽ xuất hiện. Xoá cơ sở dữ liệu Chúng ta có thể xóa toàn bộ cơ sở dữ liệu chỉ bằng một lệnh rất đơn giản, chính vì vậy bạn hãy cẩn thận với câu lệnh này vì sau khi thực hiện, tất cả các mẫu tin, tất cả các bảng, và cơ sở dữ liệu sẽ bị xóa. Cú pháp rất đơn giản: DROP DATABASE [IF EXISTS] dbname Nếu thật sự có một cơ sở dữ liệu tên ‘db_name’ tồn tại trong hệ thống cơ sở dữ liệu của MySQL, bạn sẽ có thông báo như sau: Query OK, 0 rows affected ( 0.01 sec ) mysql> _ Nếu không có cơ sở dữ liệu nào tên ‘db_name’ tồn tại trong hệ thống cơ sở dữ liệu của MySQL, bạn sẽ có thông báo lỗi: ERROR 1008 : Cant’s drop database ‘dbname’. Database doesn’t exists Tạo bảng Để tạo một bảng (table) trong MySQL bạn cần phải biết các loại dữ liệu mà hệ thống hỗ trợ (xem phần 6 : Định nghĩa các kiểu dữ liệu) và cách đặt tên cho các cột (xem phần 5 : Định danh trong MySQL ). Bạn cũng cần phải chú ý đến cơ sở dữ liệu hiện hành, nghĩa là bạn chỉ tạo được bảng khi bạn đang ở trong một cơ sở dữ liệu cụ thể nào đó (bằng cách sử dụng câu lệnh USE db_name). Dạng tổng quát của câu lệnh tạo bảng như sau: CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)] [table_options] [select_statement] Create_definition col_name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [PRIMARY KEY] [reference_definition] or PRIMARY KEY (index_col_name,...) or KEY [index_name] (index_col_name,...) or INDEX [index_name] (index_col_name,...) or UNIQUE [INDEX] [index_name] (index_col_name,...) or FULLTEXT [INDEX] [index_name] (index_col_name,...) or [CONSTRAINT symbol] FOREIGN KEY index_name (index_col_name,...) [reference_definition] or CHECK (expr) Type TINYINT[(length)] [UNSIGNED] [ZEROFILL] or SMALLINT[(length)] [UNSIGNED] [ZEROFILL] or MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL] or INT[(length)] [UNSIGNED] [ZEROFILL] or INTEGER[(length)] [UNSIGNED] [ZEROFILL] or BIGINT[(length)] [UNSIGNED] [ZEROFILL] or REAL[(length,decimals)] [UNSIGNED] [ZEROFILL] or DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL] or FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL] or DECIMAL(length,decimals) [UNSIGNED] [ZEROFILL] or NUMERIC(length,decimals) [UNSIGNED] [ZEROFILL] or CHAR(length) [BINARY] or VARCHAR(length) [BINARY] or DATE or TIME or TIMESTAMP or DATETIME or TINYBLOB or BLOB or MEDIUMBLOB or LONGBLOB or TINYTEXT or TEXT or MEDIUMTEXT or LONGTEXT or ENUM (value1,value2,value3,...) or SET(value1,value2,value3,...) index_col_name col_name [(length)] reference_definition REFERENCES tbl_name [(index_col_name,...)] [MATCH FULL | MATCH PARTIAL] [ON DELETE reference_option] [ON UPDATE reference_option] reference_option RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAUL table_options TYPE = {ISAM | MYISAM | HEAP | MERGE} or AUTO_INCREMENT = # or AVG_ROW_LENGTH = # or CHECKSUM = {0 | 1} or COMMENT = "string" or MAX_ROWS = # or MIN_ROWS = # or PACK_KEYS = {0 | 1} or PASSWORD = "string" or DELAY_KEY_WRITE = {0 | 1} or ROW_FORMAT= { default | dynamic | static | compressed } or RAID_TYPE= {1 | STRIPED | RAID0 } RAID_CHUNKS=# RAID_CHUNKSIZE=#; or UNION = (table_name,[table_name...]) Select_statement [IGNORE | REPLACE] SELECT ... (Some legal select statement) Nếu bạn tạo một bảng mà chỉ cung cấp tên bảng cần tạo, không tạo các cột thì một thông báo lỗi sẽ xuất hiện. Đó là một qui luật tự nhiên, một bảng phải có ít nhất một cột, nếu không có cột nào đó không phải là một bảng. Ví dụ như: mysql> create table tbl_name; ERROR 1113 : A table must have at least 1 column mysql> _ Trong trường hợp tên bảng cần tạo đã có trong cơ sở dữ liệu hiện hành, thông báo lỗi sẽ xuất hiện: mysql> create table tbl_name(col1 char(5)); ERROR 1050 : Table ‘tbl_name’ already exists mysql> _ Nếu xuất hiện một thông báo như dưới đây, nghĩa là việc tạo bảng của bạn đã hoàn tất đúng như yêu cầu. Query OK, 0 rows affected ( 0.01 sec ) Mysql> _ Xoá bảng Điều kiện cần thiết để có thể xoá một bảng (table) trong cơ sở dữ liệu hiện hành là bảng đó phải tồn tại. Khi thực hiện câu lệnh xoá bảng, toàn bộ các cột có trong bảng và các mẫu tin sẽ bị xoá đi. Câu lệnh xoá bảng có cú pháp rất đơn giản: DROP TABLE [IF EXISTS] tbl_name [, tbl_name,...] [RESTRICT | CASCADE] Nếu bạn xoá một bảng không tồn tại trong cơ sở dữ liệu hiện hành, một thông báo lỗi sẽ xuất hiện. ERROR 1051 : Unknown table ‘table_name’ mysql> _ Bảng bạn cần xoá chỉ thực sự được xoá xong nếu như có một dòng thông báo đáp trả như sau: Query OK, 0 rows affected ( 0.01 sec ) Mysql> _ Chỉnh sửa bảng Nếu bạn cần chỉnh sửa lại cấu trúc của một bảng như thêm/xoá một hay nhiều cột, các chỉ mục, các khoá, … câu lệnh sau sẽ giúp bạn với cú pháp tổng quát là: ALTER [IGNORE] TABLE tbl_name alter_spec [, alter_spec ...] alter_specification ADD [COLUMN] create_definition [FIRST | AFTER column_name ] or ADD [COLUMN] (create_definition, create_definition,...) or ADD INDEX [index_name] (index_col_name,...) or ADD PRIMARY KEY (index_col_name,...) or ADD UNIQUE [index_name] (index_col_name,...) or ADD FULLTEXT [index_name] (index_col_name,...) or ADD [CONSTRAINT symbol] FOREIGN KEY index_name (index_col_name,...) [reference_definition] or ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT} or CHANGE [COLUMN] old_col_name create_definition or MODIFY [COLUMN] create_definition or DROP [COLUMN] col_name or DROP PRIMARY KEY or DROP INDEX index_name or RENAME [TO] new_tbl_name or ORDER BY col or table_options ( tương tự như option của câu lệnh Create) Lưu ý rằng trong ANSI SQL chỉ sửa đổi trên một cột bằng lệnh ALTER TABLE, nhưng MySQL thì cho phép ta sửa được nhiều cột hơn. Mỗi mệnh đề sửa đổi có thể được dùng để thay đổi nhiều phần khác nhau của bảng như mô tả chi tiết dưới đây. Cú pháp Chú thích ADD [COLUMN] column_name column_type [FIRST | AFTER column_name ] Thêm một cột mới vào vị trí được chỉ định (nếu chưa được chỉ định thì cột mới sẽ thêm vào cuối). ADD [COLUMN] (column_name1 column_type, column_name2 column_type, … ) Thêm một hay nhiều cột mới vào cuối bảng. ADD INDEX [index] (column_name1, column_name2, … ) Thêm một chỉ mục vào một hay nhiều cột trong bảng. ADD PRIMARY KEY (column_name1, column_name2, … ) Các cột có tên trong danh sách sẽ là khoá chính trong bảng. ADD UNIQUE [index] (column_name1, column_name2, … ) Thêm một chỉ mục duy nhất tại các cột có trong danh sách chỉ định trong bảng. ALTER [COLUMN] column_name { SET DEFAULT new_value | DROP DEFAULT} Khởi tạo giá trị mặc định mới cho một cột hoặc xoá giá trị mặc định. CHANGE [COLUMN] column_name new_column_name new_column_type Đổi tên mới và kiểu dữ liệu mới cho cột có tên column_name. MODIFY [COLUMN] column_name column_type Tương tự như CHANGE nhưng ta có thể sử dụng để đổi kiểu dữ liệu của cột mà không cần đổi tên cột. DROP [COLUMN] column_name Xóa một cột có tên column_name khỏi bảng. DROP PRIMARY KEY Xóa khoá chính trong bảng (không phải xoá cột). DROP INDEX index Xóa chỉ mục đã đặt tên. RENAME [AS] new_table_name Đặt tên mới cho bảng. Câu lệnh RENAME TABLE Câu lệnh này dùng để đổi tên một cột đã có trong một bảng. Bạn cũng có thể đổi tên nhiều cột trong cùng một câu lệnh rename, lưu ý rằng câu lệnh chỉ làm thay đổi tên gọi của cột mà không làm thay đổi kiểu dữ liệu của cột cũng như các tham chiếu liên quan đến cột này. Cú pháp câu lệnh như sau: RENAME TABLE tbl_name TO new_table_name[, tbl_name2 TO new_table_name2,...] Câu lệnh BACKUP TABLE Câu lệnh này dùng để sao lưu lai cấu trúc của một bảng trong cơ sở dữ liệu, cách thức hoạt động của câu lệnh là tạo một bản copy của bảng được chỉ định thành các tập tin có dung lượng nhỏ trong thư mục được chỉ định. Bạn cũng có thể sao lưu nhiều bảng một lần trong cùng một câu lệnh Backup, và để đảm bảo an toàn, bạn hãy khoá các bảng cần sao lưu lại trước khi thực hiện câu lệnh Backup. Cú pháp : BACKUP TABLE tbl_name[,tbl_name...] TO '/path /to /backup /directory' Câu lệnh RESTORE TABLE Câu lệnh này dùng để phục hồi lại cấu trúc của một bảng (hay nhiều bảng ) đã được sao lưu trước đó bằng câu lệnh Backup Table. Cú pháp : RESTORE TABLE tbl_name[,tbl_name...] FROM '/path /to /backup /directory' Các lệnh thao tác trên dữ liệu Câu lệnh INSERT Các mẫu tin có trong cơ sở dữ liệu được nhập vào chỉ bằng một cách duy nhất đó là dùng câu lệnh chèn mẫu tin. Câu lệnh này có thể dùng để thêm một hay nhiều mẫu tin mới vào một bảng có trong cơ sở dữ liệu hiện hành, cú pháp của câu lệnh này gồm các dạng Dạng 1 : INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] tbl_name [(col_name,...)] VALUES (expression,...),(...),... Dạng 2 : INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] tbl_name [(col_name,...)] SELECT ... Dạng 3 : INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] tbl_name SET col_name=expression, col_name=expression, ... Các thông báo lỗi sẽ xuất hiện nếu bạn cung cấp sai tên bảng, sai tên cột hay giá trị của dữ liệu không phù hợp với kiểu dữ liệu của cột. Các tên cột chỉ ra không nhất thiết phải đúng thứ tự trong cấu trúc của bảng, nhưng dữ liệu nhập vào sẽ đúng với thứ tự của các cột được chỉ ra trong danh sách các cột cần nhập dữ liệu. Ngoài ra các cột không cần nhập dữ liệu thì không cần thiết phải có tên trong danh sách chỉ định cột trong dòng lệnh, nhưng các cột không có dữ liệu nhập vào thì nhất định phải có phần mô tả IS NULL sau phần định dạng kiểu dữ liệu của cột. Nếu bạn không cung cấp danh sách các cột cần thêm dữ liệu ở câu lệnh dạng 1, MySQL sẽ xem như tất cả các cột đều được thêm dữ liệu, dữ liệu sẽ được lưu tuần tự vào vị trí các cột đúng như trong cấu trúc các cột của bảng. Câu lệnh REPLACE Dùng để thay thế một mẩu tin đã có trong một bảng, nếu mẩu tin cũ và mẩu tin mới có cùng giá trị trên cột mang chỉ số duy nhất thì mẩu tin cũ sẽ bị xoá đi trước khi mẩu tin mới được thêm vào. Cú pháp như sau: Dạng 1 : REPLACE [LOW_PRIORITY | DELAYED] [INTO] tbl_name [(col_name,...)] VALUES (expression,...) Dạng 2 : REPLACE [LOW_PRIORITY | DELAYED] [INTO] tbl_name [(col_name,...)] SELECT ... Dạng 3 : REPLACE [LOW_PRIORITY | DELAYED] [INTO] tbl_name SET col_name=expression, col_name=expression,... Câu lệnh DELETE Để xoá các mẫu tin trong một bảng ta dùng câu lệnh xoá mẫu tin với cú pháp tổng quát như sau: DELETE [LOW_PRIORITY] FROM tbl_name [WHERE where_definition] [LIMIT rows] Nếu chỉ dùng câu lệnh DELETE FROM table_name; thì tất cả các dữ liệu trong bảng có tên table_name sẽ bị xóa hết, vì thế hãy cẩn thận. Thông thường, khi chúng ta muốn xóa một hay nhiều dòng, ta cần xác định những dòng cần xoá bằng mệnh đề WHERE. Mệnh đề LIMIT dùng để giới hạn số dòng tối đa muốn xóa. Câu lệnh TRUNCATE Câu lệnh này dùng để xoá các mẩu tin trong cơ sở dữ liệu giống như câu lệnh Delete from, nhưng có một điểm khác biệt với câu lệnh Delete là bạn không thể phục hồi lại các mẫu tin đã xoá sau khi hoàn tất câu lệnh Truncate, và bạn cũng không thể biết được số mẫu tin đã xoá đi là bao nhiêu. Cú pháp : TRUNCATE table_name Câu lệnh LOAD DATA INFILE Câu lệnh này dùng để thêm nhiều mẫu tin vào một bảng, dữ liệu có thể được lưu trữ trong một tập tin văn bản bình thường, mỗi phần tử của mẩu tin chỉ cần cách nhau bằng một ký hiệu Tab khoảng trắng hoẵc bàng những ký hiệu theo qui ước trước trong phần option của câu lệnh. Cú pháp : LOAD DATA [LOW_PRIORITY] [LOCAL] INFILE 'file_name.txt' [REPLACE | IGNORE] INTO TABLE tbl_name [FIELDS [TERMINATED BY '\t'] [[OPTIONALLY] ENCLOSED BY ''] [ESCAPED BY '\\' ] ] [LINES TERMINATED BY '\n'] [IGNORE number LINES] [(col_name,...)] Câu lệnh UPDATE Để thay đổi giá trị của dữ liệu đã có trong bảng, ta dùng câu lệnh cập nhật dữ liệu như sau: UPDATE [LOW_PRIORITY] [IGNORE] tbl_name SET col_name1=expr1, [col_name2=expr2, ...] [WHERE where_definition] [ORDER BY ...] [LIMIT #] Bạn cần cung cấp tên bảng muốn cập nhật dữ liệu vào vị trí table_name, ở vị trí expression bạn có thể là đặt một toán tử hay một giá trị mặc định mới nào đó vẫn được. Có thể giới hạn phạm vi cập nhật bằng mệnh đề WHERE nên chỉ có những mẫu tin nào thoả mãn điều kiện condition thì mới được cập nhật dữ liệu, ngoài ra để giới hạn tổng số mẫu tin cần cập nhật ta dùng mệnh để LIMIT với số lượng mẫu tin muốn cập nhật đặt tại vị trí number. mysql> UPDATE persondata SET age=age+1; mysql> UPDATE persondata SET age=age*2, age=age+1; Câu lệnh SELECT Với câu lệnh chọn mẫu tin này, chúng ta có thể lấy bất cứ mẫu tin nào thoả mãn điều kiện cần của chúng ta ngay cả khi dữ liệu không nằm trong cùng một bảng. Cú pháp chung: SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [HIGH_PRIORITY] [DISTINCT | DISTINCTROW | ALL] select_expression,... [INTO {OUTFILE | DUMPFILE} 'file_name' export_options] [FROM table_references [WHERE where_definition] [GROUP BY {unsigned_integer | col_name | formula}] [HAVING where_definition] [ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] ,...] [LIMIT [offset,] rows] [PROCEDURE procedure_name] ] Bạn có thể cung cấp một danh sách các tên cột thuộc các bảng, hay chỉ đơn giản là những hàm chức năng vào vị trí sau từ khoá Select để trình bày kết quả trả về, ngoài ra bạn cũng có thể nhận kết quả trả về và tự động lưu chúng trong một tập tin văn bản. Các điều kiện để lấy mẫu tin sẽ được đặt ở vị trí mệnh đề WHERE. Bạn có thể dùng các toán tử so sánh dưới đây được MySQL hỗ trợ để đặt trong mệnh đề điều kiện của bạn. Các hàm sử dụng trong mệnh để WHERE và SELECT : Tính toán các giá trị Có thể +,-,*,/ các giá trị trong mệnh đề Select trả về như sau: mysql> select 1+2*3; -> 7 mysql> select (1+2)*3; -> 9 Sử dụng các toán tử Logic Các toán tử Logic bao gồm AND(&&), OR(||), NOT, NOT NULL sẽ trả về các giá trị là 1(true) hoặc 0(false) hoặc NULL. Toán tử so sánh Bao gồm toán tử tương đương (), bằng (=), khác ( hay != ), lớn hơn (>), nhỏ hơn (=), nhỏ hơn hay bằng (<=), kiểm tra rỗng (IS NULL hay IS NOT NULL), hàm BETWEEN min AND max, IN, NOT IN, COALESCE(list), INTERVAL(N,N1,N2,N3,...), giá trị trả về sẽ là 0(false) hay 1(true) hay NULL . Các hàm so sánh chuỗi Hàm LIKE (giá trị trả về là 0 hay 1), NOT LIKE , REGEXP, RLIKE, NOT REGEXP, NOT RLIKE, STRCMP(expr1,expr2), MATCH (col1,col2,...) AGAINST (expr), IFNULL (expr1,expr2) Nếu expr1 không rỗng thì trả về giá trị của expr1, ngược lại thì trả về giá trị của expr2. giá trị trả về có thể lả một số hay một chuỗi ký tự tuỳ thuộc vào ngữ cảnh sử dụng hàm. Ví du: mysql> select IFNULL(1,0); //-> 1 mysql> select IFNULL(NULL,10); //-> 10 mysql> select IFNULL(1/0,'yes'); //-> 'yes' NULLIF (expr1,expr2) Giá trị trả về sẽ là NULL nếu expr1=epxr2, ngược lại thì trả về giá trị của expr1. IF (expr1 ,expr2, expr3) Nếu expr1 có giá trị (nghĩa là expr1 khác 0 và khác NULL) thì trả về giá trị của expr2, ngược lại thì trả về giá trị của expr3. ví dụ như : mysql> select IF(1>2,2,3); //-> 3 mysql> select IF(1 'yes' Các hàm toán học Gồm hàm tính giá trị tuyệt đối ABS(X) Hàm kiểm tra số là âm hay 0 hay dương (SIGN(X)) Hàm lấy phần dư của phép chia (MOD(N,M)) Hàm lấy số nguyên (FLOOR(X) hoặc CEILING(X)) Hàm làm tròn số (ROUND(X)) Hàm tính logarit (LOG(X)) Hàm luỹ thừa (POW(X,Y) hay POWER(X,Y)) Hàm tính căn bậc hai (SQRT(X)) Hàm lấy số PI (PI()) Hàm tính lượng giác (COX(X) – SIN(X) – TAN(X) – ACOS(X) – ASIN(X) – ATAN(X) – ATÀN(X) – COT(X) ) Hàm lấy số ngẫu nhiên (RAND() - RAND(N)) Hàm lấy số nhỏ nhất có trong danh sách (LEAST(X,Y,...)) Hàm lấy số lớn nhất (GREATEST(X,Y,...)) Hàm chuyển giữa số radian và độ (DEGREES(X) - RADIANS(X)), … Các hàm về chuỗi Gồm hàm lấy mã ASCII của một chuỗi (ASCII(str)) Hàm hoán chuyển số giữa các hệ đếm (BIN(N) - OCT(N) - HEX(N)) Hàm nối chuỗi (CONCAT(str1,str2,...)) Hàm đếm độ dài của chuỗi (LENGTH(str)) Hàm định vị trí của chuỗi con (LOCATE(substr,str) - POSITION(substr IN str) - INSTR(str,substr) - LPAD(str,len,padstr)) Hàm cắt chuỗi (LEFT(str,len) - RIGHT(str,len)- SUBSTRING(str,pos,len) - SUBSTRING(str FROM pos FOR len) - MID(str,pos,len) - SUBSTRING_INDEX(str,delim,count) - LTRIM(str) - RTRIM(str) ) Hàm thay thế chuỗi (SPACE(N) - REPLACE(str,from_str,to_str) - REPEAT(str,count)) Hàm đảo chuỗi (REVERSE(str)) Hàm đổi chữ hoa – thường (LCASE(str) - LOWER(str) ) Hàm về ngày giờ DAYOFWEEK(date) WEEKDAY(date) DAYOFMONTH(date) DAYOFYEAR(date) MONTH(date) DAYNAME(date) MONTHNAME(date) QUARTER(date) HOUR(time) MINUTE(time) SECOND(time) TO_DAYS(date) CURDATE() CURRENT_DATE CURTIME() CURRENT_TIME NOW() SYSDATE() Tính ngày trong tuần(1=Sunday,..7=Saturday) Trả về chỉ số của ngày trong tuần Tính số ngày trong tháng Tính số ngày trong tháng Tính tháng Tính thứ của ngày Lấy tên của tháng Tính tuần thứ mấy trong tháng Lấy giờ của time Lấy phút của time Lấy giây của time Tính số ngày từ năm 0 đến ngày date Trả về ngày hiện hành Trả về ngày hiện hành Trả về giờ hiện hành Trả về giờ hiện hành Trả về ngày, giờ hiện hành Trả về ngày, giờ hiện hành Hàm trên cơ sở dữ liệu và dữ liệu Gồm hàm xem cơ sở dữ liệu hiện hành DATABASE() Hàm xem thông tin về user hiện hành USER() - SYSTEM_USER() - SESSION_USER() - PASSWORD(str) - ENCRYPT(str[,salt]) Hàm mã hoá dữ liệu ENCODE(str,pass_str) - DECODE() - DECODE(crypt_str,pass_str) Hàm xem phiên bản mysql VERSION() Các hàm sử dụng trong mệnh để GROUP BY : COUNT(expr) Đếm số mẩu tin của expr AVG(expr) Tính giá trị trung bình của các mẩu tin MIN(expr) Trả về giá trị nhỏ nhất trong cột expr MAX(expr) Trả về giá trị lớn nhất trong cột expr SUM(expr) Trả về tổng giá trị các mẩu tin của cột expr STD(expr) Độ lệch chuẩn của các giá trị trong cột STDDEV(expr) Giống STD(expr) Câu lệnh JOIN Để truy xuất dữ liệu từ nhiều bảng ta phải kết nối các bảng lại bằng cách dùng toán tử JOIN. Toán tử này kết nối dữ liệu hai hay nhiều bảng với nhau theo mối quan hệ của chúng trong cơ sở dữ liệu. Có nhiều kiểu kết nối khác nhau được dùng trong MySQL và mỗi kiểu đều được dùng cho mỗi mục đích khác nhau. Cú pháp chung : table_reference, table_reference table_reference [CROSS] JOIN table_reference table_reference INNER JOIN table_reference join_condition table_reference STRAIGHT_JOIN table_reference table_reference LEFT [OUTER] JOIN table_reference join_condition table_reference LEFT [OUTER] JOIN table_reference table_reference NATURAL [LEFT [OUTER]] JOIN table_reference { oj table_reference LEFT OUTER JOIN table_reference ON conditional_expr } table_reference RIGHT [OUTER] JOIN table_reference join_condition table_reference RIGHT [OUTER] JOIN table_reference table_reference NATURAL [RIGHT [OUTER]] JOIN table_reference Lưu ý: khi kết nối các bảng với nhau thì trước hết phải có tên các bảng đó. Chúng ta phải chỉ định kiểu kết nối. Dấu phẩy giữa tên các bảng tương đương với kiểu INTER JOIN or CROSS JOIN, đây là kiểu kết nối được xem là kết nối đầy đủ. Khi ta kết nối hai bảng với nhau, để đơn giản ta chỉ cần dùng dấu phẩy giữa hai tên bảng, sau đó bắt buột ta phải đặt điều kiện kết nối vào mệnh đề WHERE. Đây là kiểu câu lệnh theo điều kiện mà có giải thích các đặc tính giữa các bảng theo mối quan hệ của chúng. Khi ta kết nối nhiều hơn hai bảng thì cũng không khó hơn khi ta kết nối hai bảng. Điều kiện chung là chúng ta cần kết nối các bảng theo từng cặp điều kiện kết nối. Các ví dụ : mysql> select table1.* from table1LEFT JOIN table2 ON table1.id=table2.id where table2.id is NULL; ------------------------------------------------------------------ mysql> select * from table1,table2 where table1.id=table2.id; mysql> select * from table1 LEFT JOIN table2 ON table1.id=table2.id; mysql> select * from table1 LEFT JOIN table2 USING (id); mysql> select * from table1 LEFT JOIN table2 ON table1.id=table2.id LEFT JOIN table3 ON table2.id=table3.id; ------------------------------------------------------------------ mysql> select * from table1 USE INDEX (key1,key2) WHERE key1=1 and key2=2 AND key3=3; ------------------------------------------------------------------ mysql> select * from table1 IGNORE INDEX (key3) WHERE key1=1 and key2=2 AND key3=3; Dùng bí danh cho bảng Chúng ta có thể dùng một tên khác (bí danh) để gọi ra một bảng có trong cơ sở dữ liệu trong trường hợp ta không thích dùng tên thật của bảng. Ta có thể tạo các bí danh từ đầu câu truy vấn và sử dụng bí danh đó trong suốt quá trình truy vấn. Để tiện lợi, bí danh thường là viết tắt. Những câu truy vấn lớn, nhiều bảng, nhiều cột thường dùng các bí danh. Để khai báo bí danh ta thêm vào từ khoá AS sau đối tượng cần đặt bí danh và trước bí danh của đối tượng. Đối tượng được đặt bí danh ở đây bao gồm cả đối tượng bảng và cột. Cần dùng bí danh cho một bảng khi ta muốn kết nối với chính bảng đó. Ví dụ như ta muốn tìm những dòng trong cùng một bảng mà những dòng này có chung giá trị. Các tiện ích khác Cơ chế Replication trong MySQL Sao lưu cơ sở dữ liệu là một phần hết sức quan trọng trong công việc quản trị cơ sở dữ liệu. Sử dụng cơ chế sao lưu theo lịch trình là sẽ tạo được sự an toàn cho cơ sở dữ liệu của bạn. Bạn cũng có thể sao lưu một phần của cơ sở dữ liệu như các bảng trong cơ sở dữ liệu để phục vụ cho như cầu riêng của mình mà không hề gặp trở ngại nào cả. Hệ thống mysql hỗ trợ cho cho chúng ta câu lệnh Dump để thực hiện việc này. Cú pháp chung : mysqldump [OPTIONS] database [tables] OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...] OR mysqldump [OPTIONS] --all-databases [OPTIONS] Để thực hiện câu lệnh này, trước tiên bạn cần phải được cấp quyền sao lưu cơ sở dữ liệu. Thực hiện một câu lệnh Dump thành công, nghĩa là bạn đã sao lưu được toàn bộ cấu trúc của đối tượng cần sao lưu và bao gồm luôn cả dữ liệu của đối tượng đó (tương đương với một câu lệnh Create và câu lệnh Insert into). Một số tùy chọn OPTIONS của câu lệnh: Tuỳ chọn Yù nghĩa --add-locks Thêm vào câu lệnh khoá bảng trước câu lệnh Insert into và sau đó thêm vào câu lệnh mở khoá cho bảng trong tập tin kết xuất. --add-drop-table Thêm vào câu lệnh xoá bảng trước câu lệnh tạo bảng. -A hay --all-databases Sao lưu tất cả mọi cơ sở dữ liệu có trong hệ thống. --allow-keywords Thêm từ tiền tố trong Keyword trước các bảng. -c hay --complete-insert Sử dụng câu lệnh Complete Insert. -B hay --databases Sao lưu nhiều cơ sở dữ liệu và trước mỗi cơ sở dữ liệu có dùng lệnh USE db_name; --delayed Insert các dòng với câu lệnh INSERT DELAYED. -e hay --extended-insert Chỉ dùng một câu lệnh Insert dữ liệu cho tất cả mọi dữ liệu của một bảng. -F hay --flush-logs Thực thi câu lệnh Flush trước khi bắt đầu câu lệnh sao lưu -f hay –force Bỏ qua các lỗi trong khi sao lưu. --h hay --host = … Tên Host mặc định là Localhost -n hay --no-create-db Thêm câu lệnh :’CREATE DATABASE /*!32312 IF NOT EXISTS*/ db name;’ vào kết xuất. -t hay --no-create-info Không viết thông tin về bảng vào kết xuất. -d hay --no-data Chỉ sao lưu cấu trúc của bảng mà không sao lưu dữ liệu. -P port_num hay --port=port_num Địa chỉ cổng Port sẽ được sử dụng khi kết nối đến server. -q hay –quick Sao lưu thẳng kết xuất thành tập tin mà không thông qua bộ đệm. -T hay --tab=path/to/directory Tạo kết xuất là hai tập tin .sql (cho câu lệnh Create )và .txt (cho câu lệnh Insert). -u user_name hay --user=user_name Dùng tên user name để truy cập vào server. -O var=option hay --set-variablevar=option Khởi tạo các giá trị cho biến cung cấp trong danh sách. -v hay –verbose Sao lưu và in lại mọi thông tin về server. -w hay --where='condition' Sao lư có chọn lọc mẫu tin. Chú ý : Nếu bạn thực hiện lệnh mysqldump không có tùy chọn -- opt hay –quick thì mysqldump sẽ load toàn bộ tập kết quả vào bộ nhớ trước khi kết xuất ra file backup. Vì vậy, nếu database của bạn quá lớn hay bộ nhớ server của bạn không đủ lớn thì bạn nên dùng tuỳ chọn -- opt hay –quick mỗi khi thực hiện lệnh mysqldump. Ngoài các tùy chọn OPTIONS đã giới thiệu ở trên, mysqldump còn hổ trợ nhiều tùy chọn OPTIONS khác nữa. Bạn có thể dùng mysqldump --help để xem một danh sách các tùy chọn OPTIONS của mysqdump. Để phục hồi một database được sao lưu bằng lệnh mysqldum bạn thực hiện như sau: Nếu trước đây bạn sao lưu database thành một file .sql chứa toàn bộ một database (bao gồm tất cả các lệnh tạo bảng và các lệnh chèn dữ liệu vào bảng). Để phục hồi file .sql này, từ dấu nhắc lệnh (command line), bạn gỏ: mysql database < backup_file.sql Ví dụ: Để phục hồi database mysql được backup từ lệnh mysqldump --opt mysql > d:\ test\ bk_mysql.sql bạn tiến hành như sau: Tạo một database mới với tên copyof_mysql trên MySQL server: mysql > create database copyof_mysql; Phục hồi file ‘d:\ bk_mysql.sql’ vào MySQL server với tên copyof_mysql. Từ dấu nhắc dòng lệnh (command line), bạn gỏ: C:\mysql\bin\mysql copyof_mysql < d:\ bk_mysql.sql Nếu trước đây bạn sao lưu database thành các file .sql và .txt (mỗi table sẽ bao gồm một file .sql và một file .txt). Để phục hồi database này, bạn phải dùng lệnh mysql database < backup-file.sql để phục hồi từng table, sau đó dùng lệnh load data infile ‘file_name.txt’ into table_name để load dữ liệu cho từng table. Đọc dữ liệu vào cho từng table vừa restore từ các file ‘d:\test\ *.txt’: Từ dấu nhắc dòng lệnh (command line) của mysql, bạn gỏ các lệnh: mysql> use copyof_mysql ; mysql> load data infile “d:/test/columns_priv.txt” into table columns_priv; mysql> load data infile “d:/test/ user.txt” into table user; Tạo Functions trong MySQL Câu lệnh tạo và xoá Function trong mysql rất đơn giản, cú pháp như sau: CREATE FUNCTION DROP FUNCTION Hoặc bạn có thể sử dụng một Function đã được định nghĩa trước đó viết bằng ngôn ngữ lập trình C++, … . Nhưng việc rắc rối là ở chỗ cách thức khai báo và đăng ký hàm này cho server của mysql hiểu và thược hiện chúng. Tìm hiểu về PHP Giới thiệu về PHP Giới thiệu về PHP PHP (Personal Home Page) là ngôn ngữ kịch bản phía Server. Đoạn mã PHP nhúng vào một trang HTML sẽ được thực thi tại Web server mỗi khi trang được gọi. PHP là một sản phẩm có mã nguồn mở, được biết đến từ năm 1994 do một tổ chức tư nhân thiết kế. Phiên bản PHP mới nhất hiện nay là PHP 4 và có khoảng trên năm triệu Web site trên thế giới hiện đang sử dụng ngôn ngữ này. Để biết thêm nhiều thông tin về PHP hay nhận phiên bản mới nhất về nó, xin vào địa chỉ Cách cài đặt PHP Sau khi cài đặt file set up, ta thực hiện các bước cấu hình như sau: Copy file ‘php.ini_dist’ vào thư mục WINDOWS và đổi tên thành ‘php.ini’ (Thư mục WINDOWS trong c:\ WINDOWS đối với Windows 9x và c:\ WINNT đối với WinNT) Soạn thảo thêm file httpd.conf trong thư mục conf của Apache để cấu hình Apache làm việc với PHP. Thêm các dòng sau vào file: ScripAlias /php/ “c:/path-to-your-php-dir/” AddType application/x-httpd-php .php AddType application/x-httpd-php .phtml Action application/x-httpd-php “/php/php.exe” AddType application/x-httpd-php .html AddType application/x-httpd-php .htm Kiểm tra: Soạn thảo file ‘test.php’ với nội dung: . Sau đó đặt file này trong thư mục gốc của Apache, thư mục /htdoc/ … và xem trang bằng cách gọi: hay Nếu xuất hiện trang như hình trên tức là Web server và PHP đã làm việc tốt với nhau. Nhớ kiểm tra MySQL xem có cùng làm việc với nhau không bằng cách viết trang PHP đơn giản kết nối đến server và lấy thử một vài mẩu tin trong cơ sở dữ liệu. PHP và các hệ quản trị cơ sở dữ liệu PHP hầu như hỗ trợ cho tất cả mọi hệ quản trị cơ sở dữ liệu hiện nay như: Adabas, dBase, filePro, mSQL, MySQL, Oracle, PostgreSQL, Solid, Sybase, Sybase-CT, Velocis, … , bạn có thể kết nối trực tiếp với hệ quản trị cơ sở dữ liệu bằng các hàm mà PHP hỗ trợ (nếu có) hay kết nối gián tiếp thông qua một cầu nối ODBC , JDBC đều được. Trang test.PHP minh hoạ dưới đây là một ví dụ về cách kết nối trực tiếp từ các hàm PHP đến hệ quản trị cơ sở dữ liệu MySQL để lấy dữ liệu cho trang web. Test page <? mysql_connect("localhost", "username", "password"); $query = "SELECT name, phone FROM mytable"; $result = mysql_db_query("example", $query); if ($result) { echo "Found these entries in the database:"; while ($r = mysql_fetch_array($result)) { $name = $r["name"]; $phone = $r["phone"]; echo "$name, $phone"; } echo ""; } else { echo "No data."; } mysql_free_result($result); ?> Sử dụng PHP Đưa PHP vào HTML Để đưa một đoạn mã PHP vào một trang HTML, cần phải đặt đoạn mã PHP này vào cặp thẻ (tags). Có bốn kiểu thẻ PHP bao gồm: Kiểu ngắn: . Thẻ này mặc nhiên dùng trong PHP. Kiểu XML: . Kiểu thẻ này dùng với XML. Kiểu Script: …. Kiểu ASP: . Kiểu thẻ này dùng tương tự trong ASP. Ví dụ một trang test.PHP đơn giản : <?php echo "Hello World"; ?> Khoảng trắng: ký tự trắng và tab được xem là khoảng trắng. Trình duyệt bỏ qua khoảng trắng trong HTML và PHP cũng thế. Có thể viết khoảng trắng trong HTML để dễ đọc hơn. Trong PHP không có khoảng trắng giữa các câu lệnh PHP, nhưng có thể đặt mỗi câu lệnh trên một dòng. Lời chú thích: lời chú thích viết trong mã nguồn dùng để lưu ý người đọc mã nguồn. Lời chú thích có thể là chú thích cho một kịch bản: ai viết kịch bản đó,viết với mục đích gì, sửa đổi lần cuối là lúc nào. Hay có thể chú thích cho một câu lệnh PHP, v.v... Trình dịch PHP bỏ qua các lời chú thích. Lời chú thích được đặt trong các ký hiệu chú thích: /* lời chú thích */ // lời chú thích # lời chú thích echo ("Hello world "); Thêm nội dung động : Chúng ta không sử dụng PHP để viết cho tất cả các trang Web và cũng không dùng thuần tuý trang HTML. Nguyên nhân chính để sử dụng ngôn ngữ kịch bản PHP là để viết nội dung động. Đây là một ứng dụng quan trọng vì nội dung có thể thay đổi theo nhu cầu người sử dụng, tuỳ thuộc vào thời gian truy cập. Gọi hàm: PHP có thư viện các hàm dùng để phát triển ứng dụng Web rất phong phú. Hầu hết các hàm đều nhận dữ liệu gởi vào và dữ liệu trả về. Ví dụ như hàm date() Date(“H:I, jS F”) Ta gởi vào một chuỗi trong đó chứa hai thành phần. Đó gọi là tham số hay đối số của hàm. Những đối số này, một là đối số nhập vào cho hàm sử dụng, hai là đối số để xuất kết quả. Truy xuất biến hình thức: Trong kịch bản PHP, có thể truy xuất mỗi một trường trong form như là một biến với cùng một tên gọi. Các biến hình thức: dữ liệu trong kịch bản sẽ dùng trong biến PHP.Trong PHP các tên biến bắt đầu bằng dấu ($). Nếu thiếu dấu $ trước biến thì đây là lỗi lập trình phổ biến. Có hai cách để truy cập dữ liệu qua biến: Kiểu ngắn: dùng để hiển thị các biến. Trong trường hợp này, lưu ý rằng các tên biến mà ta sử dụng trong kịch bản cùng với tên trong HTML. Ta không cần khai báo các biến trong kịch bản vì chúng được đưa vào trong kịch bản như các đối số được đưa vào hàm. Kiểu thứ hai để truy xuất các biến từ một trong hai mảng được chứa trong $HTTP_POST_VARS và $HTTP_GET_VARS. Một trong những mảng này tổ chức chi tiết tất cả các biến hình thức. Mảng này được sử dụng phụ thuộc vào phương pháp dùng để đưa vào form là POST hay là GET. Kiểu thứ hai dài hơn, chạy nhanh hơn và tránh các biến tự dộng tạo không cần thiết. Tuy nhiên kiểu ngắn hơn lại dễ đọc và dễ sử dụng. Ghép chuỗi: toán tử ghép chuỗi trong PHP là dấu (.) và nó có thể dùng để ghép các chuỗi lại với nhau. Ta thường dùng cách ghép chuỗi này trong câu lệnh echo và để tránh viết nhiều dònh lệnh echo. Biến và ngữ nghĩa: biến và chuỗi mà ta nối lại với nhau trong câu lệnh echo là các kiểu khác nhau. Biến là ký hiệu cho dữ liệu. Chuỗi là dữ liệu của bản thân nó. Khi ta sử dụng một mẫu dữ liệu thô trong chương trình thì ta gọi nó là ngữ nghĩa để phân biệt với biến. Có hai loại chuỗi trong PHP: một là cặp các trích dẫn và một là các trích dẫn đơn. PHP sẽ thử và đánh giá các trích dẫn, các chuỗi trích dẫn đơn sẽ được quy định như các ngữ nghĩa đúng. Định danh Định danh là tên của các biếân (Tên của các hàm và lớp cũng là định danh). Có một số các luật đơn giản về định danh như sau: Định danh có thể có chiều dài bất kỳ và có thể chứa các ký tự, các ký số, ký tự gạch dưới, và dấu dollar ($). Tuy nhiên, nên cẩn thận khi dùng dấu $ trong định danh. Định danh không bắt đầu với một ký số. Trong PHP, định danh là cho một biến rất quan trọng, chỉ cần khác một ký hiệu nhỏ như chữ hoa, thường, sai một vị trí thì sẽ bị lỗi và đây cũng là lỗi lập trình thường gặp. Định danh của biến có thể trùng tên với hàm. Tuy nhiên, rất dễ lầm lẫn và nên tránh dùng. Vì thế không nên tạo hàm với cùng định danh trong hàm. Sử dụng biến trong PHP Biến do người dùng định nghĩa: Ta có thể khai báo và sử dụng biến riêng ngoài những biến được đưa vào từ form HTML. Một trong những đặc điểm của PHP là nó không đòi hỏi khai báo biến trước khi dùng biến. Một biến sẽ được tạo khi gán giá trị vào biến đó. Gán giá trị cho biến: Gán giá trị vào biến dùng toán tử gán =. Ta có thể gán giá trị của một biến khác vào biến. Cấu trúc điều khiển Cấu trúc điều khiển là các cấu trúc cho phép chúng ta điều khiển việc thực thi trong một chương trình hoặc trong kịch bản. Ta có thể nhóm vào cấu trúc điều kiện và cấu trúc lặp hoặc vòng lặp. Các câu lệnh điều kiện : PHP hỗ trợ các loại câu lệnh điều kiện như sau: Câu lệnh if : trong câu lệnh if có điều kiện. Nếu điều kiện là đúng thì phần sau câu lệnh sẽ được thực thi. Điều kiện của câu lệnh phải được đặt trong dấu ngoặc đơn (). Câu lệnh else cho phép chúng ta định nghĩa một hành động khác khi điều kiện trong câu lệnh if sai. Câu lệnh else if là sự kết hợp của câu lệnh else và câu lệnh if. Bằng cách đưa ra một loạt các điều kiện, chương trình kiểm tra mỗi điều kiện cho đến khi tìm thấy một điều kiện đúng. Viết elseif hay else if cả hai đều đúng. Nếu ta viết các câu lệnh else if thành tầng, ta nên sắp xếp các khối lệnh hay các câu lệnh sẽ thực thi. Câu lệnh switch làm việc tương tự như câu lệnh if, nhưng cho phép điều kiện hơn hai giá trị. Trong câu lệnh if, điều kiện có thể đúng hoặc sai. Trong câu lệnh switch, điều kiện có thể là bất kì con số có giá trị khác nhau miễn là các giá trị đó có kiểu tương đương với nhau (integer, string hay double). Ta cung cấp thêm câu lệnh case để xử lý mỗi giá trị mà ta muốn kích hoạt. Câu lệnh Switch khác một chút so với câu lệnh if và câu lệnh elseif. Một câu lệnh if chỉ ảnh hưởng đến một câu lệnh trừ khi ta thận trọng dùng dấu ngoặc móc để tạo khối lệnh. Câu lệnh Switch thì ngược lại. Khi một trường hợp trong câu lệnh Switch được kích hoạt thì PHP sẽ thực thi các câu lệnh cho đến khi có câu lệnh break. Nếu không có câu lệnh break thì câu lệnh switch sẽ thực thi tất cả các đoạn mã sau case nếu đúng. Nếu câu lệnh break được xét đến thì dòng kế của đoạn mã sẽ được thực thi. Phép lặp : Vòng lặp while: vòng lặp đơn giản nhất trong PHP là vòng lặp while. Giống như câu lệnh if, nó dựa vào một điều kiện. Điểm khác giữa vòng lặp while và câu lệnh if là câu lệnh if thực thi khối lệnh theo sau nếu điều kiện đúng. Còn vòng lặp while thực hiện các khối lệnh lặp đi lặp lại cho đến khi điều kiện đúng. Sử dụng vòng lặp while khi ta không biết có bao nhiêu lần lặp cho đến khi điều kiện đúng. Nếu yêu cầu số lần lặp cụ thể thì ta dùng vòng lặp for. Cấu trúc cơ bản của vòng lặp while:While (condition) expression; Để bắt đầu mỗi lần lặp thì điều kiện sẽ được kiểm tra. Nếu điều kiện sai thì khối lệnh sẽ không được thực hiện và kết thúc vòng lặp. Vòng lặp for: Cấu trúc cơ bản của vòng lặp for là: for(expression1; condition; expression2) expression 3 ; Biểu thức 1 được thực thi một lần khi bắt đầu. Lúc này khởi tạo giá trị đếm. Biểu thức điều kiện được kiểm tra trước mỗi lần lặp, nếu biểu thức điều kiện sai thì ngừng lặp. Kiểm tra giá trị đếm. Biểu thức 2 được thực thi cuối mỗi lần lặp. Lúc này điều chỉnh giá trị đếm. Biểu thức 3 được thực thi mỗi lần trên một lần lặp. Biểu thức này thường là một khối lệnh. Vòng lặp do ..while : Cấu trúc chung của vòng lặp này là: Do Expression ; While (condition); Vòng lặp do . . while khác với vòng lặp while vì điều kiện được kiểm tra khi kết thúc một lần lặp. Ngắt cấu trúc điều khiển hay kịch bản Nếu muốn ngừng một vòng lặp, ta có thể sử dụng câu lệnh break trong vòng lặp giống như trong câu lệnh switch. Lúc đó, dòng kế tiếp sau vòng lặp sẽ được thực thi. Nếu muốn nhảy đến vòng lặp kế thì sử dụng câu lệnh continue. Nếu muốn kết thúc toàn bộ kịch bản PHP thì dùng exit. Lưu trữ và truy xuất dữ liệu từ tập tin Có ba bước để viết dữ liệu vào tập tin đó là: mở tập tin (nếu tập tin chưa tồn tại thì tập tin sẽ được tạo), viết dữ liệu vào tập tin, đóng tập tin. Có ba bước để đọc dữ liệu từ tập tin: Mở tập tin (nếu tập tin không thể mở thì ta chấp nhận và thoát khỏi), đọc dữ liệu từ tập tin, đóng tập tin. Mở tập tin: Có ba cách chọn khi mở tập tin: Bạn muốn mở tập tin chỉ đọc, chỉ viết hay có cả hai thuộc tính đọc và viết. Nếu viết vào tập tin, bạn muốn viết đè lên nội dung đã có của tập tin hay thêm dữ liệu mới vào cuối tập tin. Nếu bạn đã viết vào tập tin trên hệ thống mà sự khác nhau giữa các tập tin kiểu văn bản và kiểu nhị phân, bạn muốn chỉ định điều này. Sử dụng fopen() để mở tập tin: Có thể dùng hàm fopen() mở tập tin như sau: $fp = fopen (“$DOCUMENT_ROOT/../part-to-your-file / file_name”, “w”) Khi hàm này được gọi, nó thực thi với hai hoặc ba tham số. Thường thì chúng ta dùng hai tham số. Tham số thứ nhất là tập tin bạn muốn mở. Bạn có thể chỉ đươØng dẫn đến tập tin này. Ta dùng PHP để xây dựng biến $DOCUMENT_ROOT. Biến này chỉ vào cây tài liệu cơ bản trên Web server của bạn. Chúng ta sử dụng “ … ” có nghĩa là thư mục hiện hành của thư mục $DOCUMENT_ROOT. Thư mục này ở bên ngoài cây tài liệu vì lý do bảo mật. Đường dẫn này gọi là đường dẫn quan hệ để mô tả vị trí trong hệ thống tập tin quan hệ với $DOCUMENT_ROOT. Tham số thứ hai của fopen() là chế độ tập tin. Chế độ này cho biết bạn muốn làm gì trên tập tin. Sau đây là một số các chế độ trong fopen(): Chế độ Ý nghĩa R Chế độ đọc_mở tập tin để đọc, bắt đầu từ tập tin khởi đầu. r+ Chế độ đọc_mở tập tin để đọc và viết, bắt đầu từ tập tin khởi đầu. W Chế độ viết_mở tập tin để viết, bắt đầu từ tập tin khởi đầu. Nếu tập tin đã tồn tại rồi thì xoá nội dung đã có. Nếu tập tin chưa tồn tại thì tạo tập tin mới. W+ Chế độ viết_mở tập tin để viết và đọc, bắt đầu từ tập tin khởi đầu. Nếu tập tin đã tồn tại rồi thì xoá nội dung đã có. Nếu tập tin chưa tồn tại thì tạo tập tin. A Chế độ thêm_ mở tập tin để thêm vào (viết), bắt đầu từ nội dung đã có. Nếu tập tin chưa tồn tại thì tạo tập tin. a+ Chế độ thêm_ mở tập tin để thêm vào (viết) và đọc, bắt đầu từ nội dung đã có. Nếu tập tin chưa tồn tại thì tạo tập tin. B Chế độ nhị phân_được sử dụng trong việc liên kết với một trong những chế độ khác. Bạn muốn dùng chế độ này nếu hệ thống tập tin của bạn khác nhau giữa tập tin nhị phân và tập tin văn bản. Hệ thống Windows thì khác nhau còn Unix thì không. Tham số thứ ba của fopen() là tuỳ chọn. Bạn sử dụng tuỳ chọn nếu bạn muốn tìm đường dẫn (include_path) đến tập tin. Nếu bạn muốn dùng thì bạn phải thiết lập tham số này thành 1. Nếu dùng tham số này thì không cần thêm tên thư mục hay đường dẫn đến tập tin. Ví dụ: $fp = fopen (“file_name”, “a”, 1); Nếu mở tập tin thành công, con trỏ chỉ đến tập tin được trả về và được lưu trong một biến, trong trường hợp này là $fp. Bạn sử dụng biến này để truy xuất tập tin. Bạn cũng có thể dùng fopen() để mở tập tin qua FTP hay HTTP. Nếu tên tập tin bắt đầu với ftp:// thì một kết nối FTP được mở đến server và kết quả sẽ được trả về. Nếu tên tập tin bắt đầu với http:// thì một kết nối HTTP được mở đến server và kết quả sẽ được trả về. Khi dùng chế độ HTTP, bạn phải có dấu /. Ví dụ như: Hàm fopen() không hỗ trợ HTTP chuyển hướng, vì thế bạn phải chỉ ra URL tham chiếu tới thư mục sau dấu /. Lỗi thường gặp khi mở tập tin là cố mở một tập tin không cho quyền đọc và viết. PHP sẽ cảnh báo cho bạn. Viết tập tin: Viết vào tập tin trong PHP tương đối đơn giản. Có thể dùng hàm fwrite() (viết vào tập tin) hoặc fputs() (đặt chuỗi vào tập tin), fputs() là bí danh của fwrite(). Ta gọi hàm fwrite() như sau: fwrite($fp, $outputstring); Hàm fwrite() có 3 tham số nhưng tham số thứ ba là tuỳ chọn. Cấu trúc chung của fwrite() là: fwrite(int fp, string str, int [length]); Tham số thứ ba của fwrite(), length, số byte tối đa được viết vào. Nếu có dùng tham số này thì fwrite() sẽ viết chuỗi vào tập tin được chỉ đến bởi fp cho đến khi kết thúc chuỗi hay kết thúc số byte chiều dài. Đóng tập tin: Khi dùng xong một tập tin thì cần phải đóng tập tin. Nên dùng với hàm fclose(): fclose($fp); Hàm này trả về giá trị đúng nếu tập tin đóng thành công hoặc sai nếu không thành công. Đọc từ tập tin: Trước tiên là mở tập tin để đọc: fopen(). Khi nào ngừng mở tập tin thì gọi hàm feof(): Hàm feof() sẽ trả về giá trị đúng nếu con trỏ tập tin ở tại vị trí kết thúc tập tin. Mặc dù tên nghe lạ nhưng dễ nhớ khi biết feof là: File End Of File. Đọc một dòng một lần: fgets(), fgetss(), fgetcsv() $order = fgets($fp, 100); Hàm này dùng để đọc một dòng từ tập tin. Hàm sẽ đọc đến khi bắt gặp ký tự (\n), bắt gặp một EOF, hay đọc 99 byte từ tập tin. Chiều dài tối đa để đọc bằng chiều dài trừ đi một byte. Có nhiều hàm khác nữa dùng để đọc tập tin. Hàm fgets() thông dụng khi giải quyết các tập tin có chứa văn bản thuần tuý. Một biến thể của fgets() là fgetss(). String Fgetss(int fp, int length, string [allowable_tags]); Hàm fgetcsv() là biến thể khác của fgets(). Hàm này dùng để ngắt những dòng trong tập tin khi bạn dùng ký tự phân ranh, như ký tự tab, hay dấu phẩy. Đọc cả tập tin: readfile(), fpassthru(), file() Thay vì đọc mỗi lần một dòng thì ta đọc cả tập tin. Có 3 cách thực hiện: Cách thứ nhất dùng readfile(), gọi hàm readfile() để mở tập tin, hiển thị nội dung chuẩn và đóng tập tin. Mẫu của readfile(): Int readfile(string filename, int [use_include_path]); Cách thứ hai dùng fpassthru(). Dùng fopen() để mở tập tin trước. Sau đó gởi một tập tin như gởi đối số vào fpassthru(), nó sẽ kết xuất nội dung của tập tin từ vị trí con trỏ hướng tới xuất chuẩn. Đóng tập tin khi đã hoàn thành. Hàm này trả về giá trị đúng nếu đọc thành công và sai khi không thành công. Cách thứ ba dùng hàm file(). Hàm này thay vì hiển thị để xuất, nó đưa vào một mảng. Ví dụ: $filearray = file($fp); Nó sẽ đọc cả tập tin vào mảng $filearray. Mỗi dòng của tập tin sẽ được lưu trong mỗi phần tử của mảng. Đọc một ký tự fgetc(): Để đọc mỗi lần một giá trị từ tập tin ta dùng hàm fgetc(). Nó tạo con trỏ tập tin như một tham số và trả về ký tự kế trong tập tin. Đọc một chiều dài bất kỳ: Ta dùng hàm fread() Sử dụng hàm fread() để đọc số byte chiều dài từ tập tin. Hàm này sử dụng như sau: String fread( int fp, int length); Kiểm tra tập tin có tồn tại không: Ta dùng hàm file_exists() Nếu muốn kiểm tra một file xem có tồn tại không mà không cần mở nó ta dùng hàm file_exists(). Kiểm tra kích cỡ tập tin: dùng hàm filesize(). Cách dùng: Echo filesize(“$DOCUMENT_ROOT/../orders/orders.txt”); Có thể dùng với fread để đọc cả tập tin. Xóa tập tin: Ta dùng hàm unlink() unlink(“$DOCUMENT_ROOT/../orders/orders.txt”); Hàm trả về sai nếu tập tin chưa được xóa. Vị trí bên trong tập tin: Ta dùng hàm rewind (), fseek(), ftell() Chúng ta có thể vận dụng và khám phá vị trí bên trong tập tin bằng cách dùng hàm rewind (), fseek(), ftell(). Hàm rewind () khởi tạo lại vị trí con trỏ tập tin về nơi bắt đầu tập tin. Hàm ftell() thông báo trong tập tin con trỏ trỏ cách xa bao nhiêu byte. Hàm fseek() dùng khởi tạo con trỏ tập tin trỏ đến một số điểm trong tập tin. Dạng của nó là: Fseek(int fp, int offset); Hàm fseek() khởi tạo con trỏ tập tin trỏ đến byte offset trong tập tin. Hàm rewind () tương đương hàm fseek() với offset là zero. Khóa tập tin: Giả sử có hai người dùng cùng gọi fopen(). Điều gì sẽ xảy ra khi một người bắt đầu viết vào tập tin, kế đến một người khác cũng gọi fopen() và bắt đầu viết? Nội dung cuối cùng của tập tin là gì? Để tránh vấn đề trên ta dùng khóa tập tin. Sử dụng hàm flock() có thể tránh được tình trạng trên. Hàm này gọi sau khi một tập tin đã được mở nhưng trước bất kỳ dữ liệu nào được đọc từ tập tin hay viết vào tập tin. Dạng của hàm này : Flock (int fp, int operation); Bạn cần đưa vào hàm một con trỏ trỏ tới tập tin mở và số đại diện cho kiểu khóa mà bạn yêu cầu. Nó trả về true nếu khóa thành công và trả về false nếu không thành công. Các giá trị thao tác của hàm flock() gồm : 1 Khóa đọc. Nghĩa là tập tin được chia sẽ với nhiều người đọc. 2 Khóa viết. Đây là khóa dành riêng. Tập tin không thể chia sẽ. 3 Khóa tồn tại bản quyền. Sử dụng các mảng Khái niệm về mảng: Mảng là nơi lưu tập hợp các giá trị bằng cách này cho phép bạn nhóm các vô hướng thông dụng. Các giá trị lưu trong mảng gọi là phần tử mảng. Mỗi phần tử có một chỉ số (còn gọi là khoá) để truy cập phần tử mảng. Mảng có chỉ số số học bắt đầu từ zero hoặc một. Trong PHP mặc định bắt đầu từ zero. Mảng có chỉ số: Khởi tạo mảng với chỉsố. Ví dụ : array (“abc”, “bcd”, “cde”) Nếu bạn có dữ liệu và muốn tạo một mảng khác chỉ cần copy thành một mảng khác bằng toán tử =. Nếu bạn muốn có một tiến trình các số tăng dần trong mảng bạn có thể dùng hàm range() để tự tạo các mảng cho bạn. Gán các giá trị cho các phần tử trong mảng: Bạn có thể gán trực tiếp các giá trị cho các phần tử trong mảng ngay khi bạn định nghĩa một mảng, hoặc sau đó. Ví dụ : $fruits = array ( "fruits" => array("a"=>"orange", "b"=>"banana", "c"=>"apple"), "numbers" => array(1, 2, 3, 4, 5, 6), "holes" => array("first", 5 => "second", "third") ); Sắp xếp mảng: Sử dụng hàm sort() để sắp sếp thứ tự trong mảng tăng dần. Dùng hàm asort() và ksort() để sắp xếp mảng kết hợp. Nếu chúng ta dùng mảng kết hợp để lưu các mục dữ liệu thì chúng ta dùng các loại hàm sort khác nhau để sắp xếp các phần tử trong mảng. Hàm asort() để sắp xếp mảng theo giá trị của mỗi phần tử. Hàm ksort() sắp xếp theo khóa(theo phần tử ) nhiều hơn là theo giá trị. Có ba hàm sắp xếp đảo ngược là rsort(), arsort(), krsort(). Hàm sắp xếp đảo ngược dùng tương tự như các hàm sắp xếp khác. Hàm rsort() sắp xếp các chỉ số mảng theo thứ tự tăng dần. Hàm arsort() sắp xếp giá trị mỗi phần tử của mảng theo thứ tự tăng dần. Hàm krsort() sắp xếp khóa mỗi phần tử của mảng theo thứ tự tăng dần. Nếu bạn muốn sắp xếp lại mảng theo cách khác bạn có thể dùng hàm shuffle() hay array_reverse(). Hàm shuffle() sắp xếp ngẫu nhiên lại các phần tử trong mảng. Hàm array_reverse() cho bạn bản sao của mảng với tất cả thứ tự phần tử bị đảo ngược. Sự điều hướng trong mảng :Ta có thể dùng các hàm sau để điều hướng trong mảng như: Each() Phần tử hiện hành trước con trỏ current() Trả về phần tử đầu tiên reset() Trả con trỏ về vị trí đầu tiên của mảng end() Gởi con trỏ đến cuối mảng next() Chuyển con trỏ lên phía trước và trả về phần tử hiện hành mới prev() Di chuyển con trỏ hiện hành lùi về một vị trí và trả về phần tử hiện hành mới Nếu chúng ta tạo mảng mới thì con trỏ hiện hành sẽ trỏ tới phần tử đầu tiên của mảng. Sửa đổi các phần tử trong mảng: Hàm array_walk() cho phép ta sửa đổi các phần tử trong mảng. Dạng của hàm array_walk() là: Int array_walk(array arr, string func, [mixed userdata]) Hàm array_walk() có 3 tham số. Thứ nhất, tham số arr là mảng được xử lý. Thứ hai, tham số func tên hàm do người dùng định nghĩa và sẽ áp dụng cho mỗi phần tử trong mảng. Thứ ba, tham số userdata là tùy chọn. Đếm phần tử trong mảng: Để đếm các phần tử trong mảng, ta sử dụng các hàm sau: Count() Trả về số phần tử trong mảng sizeof() Đếm số phần tử trong mảng array_count_value() Đếm số lần lặp lại của các giá trị trùng nhau và trả về một mảng chứa các bảng. Mảng này chứa tất cả các giá trị duy nhất trong mảng theo khóa. Mỗi khóa có một con số cho chúng ta biết khóa đó xảy ra bao nhiêu lần. Hàm extract() : Dạng của hàm này như sau : Extract( array var_array [, int extract_type] [, string prefix]); Mục đích của hàm này lấy một mảng và tạo biến với tên của khóa trong mảng. Các giá trị này khởi tạo thành các giá trị trong mảng. Ví dụ : $array=array(“key1”=>”value1”,”key2”=>”value2”,“key3”=>”value3”); extract($array); echo $key1, $key2, $key3; Mảng có 3 phần tử key1, key2, key3, sử dụng extract() ta tạo được 3 biến $key1, $key2, $key3. Có hai đối số trong extract() là extract_type và prefix. Biến extract_type cho biết có bao nhiêu xử lý xung đột. Có những trường hợp một biến tồn tại trùng tên với khóa. Mặc nhiên nó sẽ viết đè lên biến đã tồn tại. Các kiểu extract_type: extr_overwrite Viết đè lên biến đã tồn tại khi xung đột xảy ra. extr_skip Bỏ qua một phần tử khi xung đột xảy ra. extr_prefix_same Tạo một biến được đặt tên là $prefix_key khi xung đột xảy ra. Bạn phải cung cấp prefix. extr_prefix-all Tiền tố của tất cả các biến đặt tên là prefix. Bạn phải cung cấp prefix. Làm việc với các biểu thức PHP hỗ trợ hai loại cú pháp để xử lý các biểu thức đó là kiểu POSIX và kiểu PERL. Trong đó, kiểu POSIX được biên dịch mặc định trong PHP, nếu dùng cú pháp kiểu PERL thì cần có các hàm thư viện PCRE để biên dịch. Các ký tự đại diện dùng trong PHP: . Đại diện cho một ký tự. [a..z] Đại diện cho các ký tự chữ thường [aeiou] Đại diện cho các ký tự chữ có trong danh sách [^a..z] Không phải là các ký tự chữ thường * Lặp lại từ 0 đến nhiều lần + Lặp lại từ 1 đến nhiều lần {a,b} Lặp lại ít nhất a lần , nhiều nhất b lần (a<b) ^ Bắt đầu một biểu thức $ Kết thúc một biểu thức \ Hiển thị các ký tự đặc biệt theo sau nó. Sử dụng lại đoạn mã và viết hàm PHP hỗ trợ và cho phép ta sử dụng lại đoạn mã đã có, điều này làm cho chi phí thiết kế Web-site được giảm thiểu, và làm tăng tính gọn nhẹ và hợp lý của trang Web. Các đoạn mã được dùng lại nên gói gọn trong một fil

Các file đính kèm theo tài liệu này:

  • docluan-van-2.doc