Tài liệu PHP and MySQL by Example- P13 doc

50 465 0
Tài liệu PHP and MySQL by Example- P13 doc

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Table 14.3. Most Common SQL Data Types (%&%123"# (#)*$+"&+', maximum!size!is!specified!in!the!parentheses. TINYTEXT A!string!with!a!maximum!length!of!255!characters. TEXT A!variable8length!text!string!with!a!maximum!length!of!65,535!characters,! used!for!storing!large!text!files,!documents,!text!areas,!etc. BLOB Binary!large!object.!A!binary!string!with!a!maximum!length!of!65,535! characters,!used!for!storing!binary!files,!images,!sounds,!etc. Date!and!Time DATE (yyyy-mm-dd)!year,!month,!day;!e.g.,!2006-10-30!(Note:!MySQL!also!allows! you!to!store!0000-00-00!as!a!“dummy!date.”) DATETIME (yyyy-mm-dd hh:mm:ss)!date!and!time;!e.g.,!2006-10-30 22:59:59 TIMESTAMP (yyyy-mm-dd hh:mm:ss)!date!and!time;!e.g.,!1970-01-01!(date!and!time!of! last!transaction!on!a!row) TIME (hh:mm:ss)!time;!e.g.,!10:30:58 YEAR (yyyy | yy)!year!in!four!or!two!digits;!e.g.,!1978!or!78 ! 14.3.3. Creating a Table Creating a table is a little more complicated than creating the database. The CREATE TABLE statement is used to create a new table in the database. First you must name the new table and then specify all the fields that will be included in the table as well as the data types and any other attributes. A data type can be an integer, a floating-point (real) number such as 5.4, a string of characters, a date, a time, and so on. Not all databases will specify data types in the same way. To see what data types and attributes are available for MySQL, see Table 14.3 or the MySQL documentation. Designing your tables correctly is important and a subject that merits further research if you have not worked with databases before. See http://databases.about.com/od/specificproducts/a/normalization.htm for an excellent beginner’s tutorial on database design. For now, here are some rules to keep in mind when designing the table: 451 Choose!the!right!data!type!for!your!fields;!for!example,!use!integer!types!for!primary!keys,! use!float!and!double!types!for!large!numbers,!use!decimal!or!numeric!types!for!currency,! use!the!correct!date!format!for!times!and!dates,!and!give!yourself!ample!field!width!for! strings!containing!variable!numbers!of!characters,!such!as!names!and!addresses.!If!you!are! saving!binary!data!such!as!images!and!sounds,!use!a!data!type!that!supports!such!large! amounts!of!data!such!as!blob!and!text!types.!See!Table!14.3. 651 Give!columns!sensible!and!concise!names.!Make!them!unique!within!the!table.!Do!not!have! duplicate!columns!in!the!same!table,!as!shown!below.!These!should!not!be!three!columns! all!headed!with!phone.! Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. 751 Store!only!one!value!under!each!column!heading!in!each!row;!for!example,!if!you!have!a! “Phone”!field,!you!should!not!have!“cell,!home,!business”!all!in!one!table!cell,!as!shown! here:! 851 Create!separate!tables!for!each!group!of!related!items!and!give!each!row!a!unique!column! or!primary!key,!as!shown!here:! ! User!Table:! Phone!Table:! 951 If!you!still!have!redundant!data,!put!it!in!its!own!table!and!establish!a!relation!between!the! tables!with!foreign!keys. Format CREATE TABLE table_name ( column_name1 data_type, column_name2 data_type, column_name3 data_type < no comma on the last entry ) Example 14.26. Code!View:! 1 mysql> CREATE DATABASE pets; Query OK, 1 row affected (0.24 sec) 2 mysql> USE pets; 3 mysql> CREATE TABLE dog -> ( name varchar(20), -> owner varchar(20), -> breed varchar(20), -> sex char(1), -> birth date, -> death date -> ); Query OK, 0 rows affected (0.16 sec) 4 mysql> describe dog; Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. + + + + + + + | Field | Type | Null | Key | Default | Extra | + + + + + + + | name | varchar(20) | YES | | NULL | | | owner | varchar(20) | YES | | NULL | | | breed | varchar(20) | YES | | NULL | | | sex | char(1) | YES | | NULL | | | birth | date | YES | | NULL | | | death | date | YES | | NULL | | + + + + + + + 6 rows in set (0.00 sec) Explanation 1 A!database!called!“pets”!is!created. 2 The!“pets”!database!is!selected!and!entered. 3 A!table!called!“dogs”!is!created!with!fields!and!their!data!types.!The!“name”,! “owner”,!and!“breed”!will!consist!of!a!varying!number!of!up!to!20!characters.! The!“sex”!is!one!character,!either!“f”!or!“m”!for!female!or!male.!The!“birth”!and! “death”!columns!are!assigned!date!type. 4 The!DESCRIBE!command!is!like!the!SHOW!command.!It!displays!the!layout!of!the! new!table. Now we can insert some data into the new table. Example 14.27. mysql> INSERT INTO dog(name,owner,breed, sex, birth, death) -> VALUES('Fido','Mr. Jones', 'Mutt', 'M', '2004-11-12', '2006-04-02'); Query OK, 1 row affected (0.09 sec) 14.3.4. Creating a Key In real life, people can be identified by Social Security numbers, driver’s license numbers, and employee numbers; books can be identified by ISBN numbers; and a Web store order can be identified by a purchase order number. These identification numbers must be unique so that no two people have the same Social Security number, no two books have the same ISBN number, and so on. Keys are used to uniqely identify a record in a table. There are two types of keys: primary keys and foreign keys. Primary Keys Each table typically has a primary key. Primary keys are used to uniquely identify a record in the database. They must be unique, never change, occur only once per table, and are normally numeric types. You can choose to manually generate this unique number for each record or let the database do it for you. If you let the database generate the primary key, it will generate a unique number, given a starting value (e.g., 1) and then for each new record increment that number by one. Even if a record is deleted, that number is never recycled. The database increments its internal counter, guaranteeing that each record will be given a unique “key.” To set a field as a primay key, use the attribute PRIMARY KEY (field_name) and to tell the database to automatically create the unique number, use the AUTO_INCREMENT attribute following the field definition. The primary key cannot be null. The following two examples describe a table called “categories” where the primary key is called “CategoryID”. It will automatically be incremented each time a new category is added to the table. Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. Example 14.28. mysql> USE northwind; Database changed mysql> DESCRIBE categories; + + + + + + + | Field | Type | Null | Key | Default | Extra | + + + + + + + | CategoryID | int(11) | | PRI | NULL |auto_increment | | CategoryName | varchar(15) | | MUL | | | | Description | longtext | YES | | NULL | | | Picture | longblob | YES | | NULL | | + + + + + + + 4 rows in set (0.09 sec) Explanation The “CategoryID” is the primary key, an integer of up to 11 digits, which will be incremented by 1, initially set to NULL (no value). The first time a record is inserted into the database, the value will be 1. Example 14.29. mysql> SELECT CategoryID, CategoryName FROM categories; + + + | CategoryID | CategoryName | + + + | 1 | Beverages | | 2 | Condiments | | 3 | Confections | | 4 | Dairy Products | | 5 | Grains/Cereals | | 6 | Meat/Poultry | | 7 | Produce | | 8 | Seafood | + + + 8 rows in set (0.16 sec) Explanation The primary key is called “CategoryID”. It is used to uniquely identify the different categories in this table from the “northwind” database. When a new category is added to the table, the “CategoryID” will be automatically incremented by 1. Foreign Keys If a primary key is referenced in another table, it is called a foreign key. Foreign keys are used to create relation between tables. In the following example, two tables are described, which both reference the “CategoryID” key, although it is primary in one and foreign in the other. Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. Example 14.30. Code!View:! mysql> DESCRIBE categories; + + + + + + + | Field | Type | Null | Key | Default | Extra | + + + + + + + 1 | CategoryID | int(11) | | PRI | NULL | auto_increment | | CategoryName | varchar(15) | | MUL | | | | Description | longtext | YES | | NULL | | | Picture | longblob | YES | | NULL | | + + + + + + + 4 rows in set (0.00 sec) mysql> DESCRIBE products; + + + + + + + | Field | Type | Null| Key | Default| Extra | + + + + + + | ProductID | int(11) | | PRI | NULL | auto_increment| | ProductName | varchar(40) | | MUL | | | | SupplierID | int(11) | YES | MUL | NULL | | 2 | CategoryID | int(11) | YES | MUL | NULL | | | QuantityPerUnit| varchar(20) | YES | | NULL | | | UnitPrice | decimal(19,4)| YES | | NULL | | | UnitsInStock | smallint(6) | YES | | NULL | | | UnitsOnOrder | smallint(6) | YES | | NULL | | | ReorderLevel | smallint(6) | YES | | NULL | | | Discontinued | tinyint(4) | | | 0 | | + + + + + + + 10 rows in set (0.00 sec) Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. Explanation 1 The!“categories”!table!has!a!primary!key!field!called!“CategoryID”. 2 The!“products”!table!has!its!own!primary!key!(“ProductID”)!in!addition!to!a! foreign!key!called!“CategoryID”.!If!a!primary!key!is!referenced!in!another!table,! it!is!called!a!foreign!key. 14.3.5. Relations A major advantage of the relational database systems is the ability to create relations between tables. Simply put, a relation is a connection between a field of one table and a field of another. This relation allows you to look up related records in the database. The operation of matching rows from one table to another using one or more column values is called a join. There are several types of join statements, such as full joins, cross joins, left joins, and so on, but let’s start with a simple joining of two tables, called an inner join. Tables can be related to each other with keys. As we discussed earlier, a primary key is a column with a unique value for each row. A matching key in a second table is called a foreign key. With these keys, you can bind data together across tables without repeating all of the data in every table where a certain condition is met. Consider the the previous Example 14.30, in which two tables from the “northwind” database are described. One table is called “categories” and the other called “products”. “CategoryId” is a primary key field in the “categories” table, and it is a foreign key in the “products” table. The “CategoryId” key is used to create a relationship between the two tables. Two Tables with a Common Key As discussed previously, both the “categories” table and the “products” table have a “CategoryID” key with the same values, making it possible to create a relation between the two tables. Let’s create a relation in which all the product names are listed if they are in the “Seafood” category. Because every product in the “products” table falls into one of the eight categories in the “categories” table, the two tables can be bound by their common “CategoryID”. Example 14.31. Code!View:! mysql> SELECT CategoryID, CategoryName FROM categories; + + + | categoryID | categoryName | + + + | 1 | Beverages | | 2 | Condiments | | 3 | Confections | | 4 | Dairy Products | | 5 | Grains/Cereals | | 6 | Meat/Poultry | | 7 | Produce | | 8 | Seafood | + + + 8 rows in set (0.00 sec) mysql> SELECT CategoryID, ProductName FROM products; (Partial Output) + + + | CategoryID | ProductName | + + + | 1 | Chai | | 1 | Chang | | 2 | Aniseed Syrup | Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. | 2 | Chef Anton's Cajun Seasoning | | 2 | Chef Anton's Gumbo Mix | | 2 | Grandma's Boysenberry Spread | | 7 | Uncle Bob's Organic Dried Pears | | 2 | Northwoods Cranberry Sauce | | 6 | Mishi Kobe Niku | | 8 | Ikura | | 4 | Queso Cabrales | | 4 | Queso Manchego La Pastora | | 8 | Konbu | | 7 | Tofu | | 2 | Genen Shouyu | Explanation This example displays columns from both the “categories” table and the “products” table. In the “categories” table the “CategoryID” is the primary field and uniquely identifies all other fields in the table. In the “products” table, the “CategoryID” is a foreign key and is repeated many times for all the products. Using a Fully Qualified Name and a Dot to Join the Tables When querying more than one table, a dot is used to fully qualify the columns by their table name to avoid potential ambiguity if two tables have a field with the same name, as shown in Example 14.32. Example 14.32. mysql> SELECT CategoryName, ProductName FROM categories, products -> WHERE products.CategoryID = 8 AND categories.CategoryID = 8; + + + | CategoryName | ProductName | + + + | Seafood | Ikura | | Seafood | Konbu | | Seafood | Carnarvon Tigers | | Seafood | Nord-Ost Matjeshering | | Seafood | Inlagd Sill | | Seafood | Gravad lax | | Seafood | Boston Crab Meat | | Seafood | Jack's New England Clam Chowder | | Seafood | Rogede sild | | Seafood | Spegesild | | Seafood | Escargots de Bourgogne | | Seafood | Röd Kaviar | + + + 12 rows in set (0.00 sec) Explanation In the SELECT, two tables (separated by commas) will be joined by the “CategoryID” field. Because the field name is the same in both tables, the table name is prepended to the field name with a dot, as products.CategoryId and categories.CategoryId. In the WHERE clause, the two tables are connected if the both tables have a “CategoryID” equal to 8. Aliases To make things a little easier by typing less with complicated queries, SQL provides an aliasing mechanism that allows you to use symbolic names for columns and tables. The alias is defined with the AS keyword and the alias consists of a Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. single character or an abbreviated string. When the alias is used in the WHERE clause to represent a table name, it is appended with a dot and the name of the field being selected from that table. Format (Column Alias) SELECT column_name AS column_alias_name FROM table_name ! (Table Alias) SELECT column_name FROM table_name AS table_alias_name Example 14.33. mysql> SELECT CategoryName as Foods FROM categories; + + | Foods | + + | Beverages | | Condiments | | Confections | | Dairy Products | | Grains/Cereals | | Meat/Poultry | | Produce | | Seafood | + + 8 rows in set (0.00 sec) Explanation The column name from table “categories” was named “CategoryName”. An alias called “Foods” is created by using the AS keyword after “CategoryName”. Now when the SELECT returns a result-set, the output will show “Foods” as the name of the column. Example 14.34. mysql> SELECT ProductName FROM products AS p, categories AS c WHERE -> p.CategoryID = c.CategoryID AND c.CategoryName="SeaFood"; + + | ProductName | + + | Ikura | | Konbu | | Carnarvon Tigers | | Nord-Ost Matjeshering | | Inlagd Sill | | Gravad lax | | Boston Crab Meat | | Jack's New England Clam Chowder | | Rogede sild | | Spegesild | | Escargots de Bourgogne | | Röd Kaviar | + + 12 rows in set (0.00 sec) Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. Explanation This example might look a little tricky at first. The table named “products” is given an alias called “p” and the table name “categories” is given the alias “c”. These aliases are short names, making it easier to type the query when more than one table is involved; for example, instead of typing products.CategoryID, we can type p.CategoryID, and categories.CategoryName can be referenced as c.CategoryName. 14.3.6. Altering a Table When you alter a table, you redefine its structure by adding or dropping a new columns, keys, indexes, and tables. You can also use the ALTER command to change column names, types, and the table name. Format ALTER TABLE tablename ADD column datatype ! Example: alter table artist add column ArtDate date; alter table artist drop column "Address"; Example 14.35. Code!View:! use pets; 1 mysql> ALTER TABLE dog ADD pet_id int(11); Query OK, 0 rows affected (0.13 sec) Records: 0 Duplicates: 0 Warnings: 0 2 mysql> ALTER TABLE dog MODIFY column pet_id int(11) > auto_increment primary key; Query OK, 1 row affected (0.11 sec) Records: 1 Duplicates: 0 Warnings: 0 3 mysql> describe dog; + + + + + + + | Field | Type | Null | Key | Default | Extra | + + + + + + + | name | varchar(20) | YES | | NULL | | | owner | varchar(20) | YES | | NULL | | | breed | varchar(20) | YES | | NULL | | | sex | char(1) | YES | | NULL | | | birth | date | YES | | NULL | | | death | date | YES | | NULL | | | pet_id | int(11) | | PRI | NULL | auto_increment | + + + + + + + 7 rows in set (0.00 sec) mysql> select * from dog; Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. + + + + + + + + | name | owner | breed | sex | birth | death | pet_id | + + + + + + + | Fido | Mr. Jones | Mutt | M | 2004-11-12| 2006-04-02| 1 | | Lassie| Tommy Rettig| Collie| F | 2006-01-10| NULL | 2 | + + + + + + + + 2 rows in set (0.00 sec) Explanation 1 The!ALTER!command!will!change!the!table!by!adding!a!new!field,!called! “pet_id”,!an!integer!of!11!digits. 2 Once!the!“pet_id”!field!has!been!created,!the!ALTER!command!is!used!again!to! make!this!a!primary!key!that!will!automatically!be!incremented!each!time!a! record!is!added. 3 The!DESCRIBE!command!shows!the!structure!of!the!table!after!it!was!changed.! A!primary!key!has!been!added. 14.3.7. Dropping a Table To drop a table is relatively simple. Just use the drop command and the name of the table: mysql> drop table dog; Query OK, 20 rows affected (0.11 sec) 14.3.8. Dropping a Database To drop a database, use the drop database command: mysql> drop database pets; Query OK, 1 row affected (0.45 sec) 14.4. SQL Functions The following functions are used to alter or format the output of a SQL query. Functions are provided for strings, numbers, dates, server and information, and so on. They return a result-set. Functions are vendor specific, meaning functions supported by MySQL might not be supported by Microsoft SQL Server. See the MySQL documenation for a list of all functions supported. When using SELECT with a function, the function, as it was called, is displayed as the name of the column in the result-set as shown in Example 14.36. Example 14.36. 1 mysql> SELECT avg(UnitPrice) FROM order_details; + + | avg(UnitPrice) | + + | 26.21851972 | + + 1 row in set (0.01 sec) 2 mysql> SELECT avg(UnitPrice) as 'Average Price' FROM order_details; Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. [...]... integrate PHP and MySQL PHP provides built-in functions that allow all the necessary operations for opening and selecting the database, and for sending it SQL queries to create tables, update and delete them, retrieve records, and display the results You can create your HTML form, process it, and connect to the MySQL database all in one PHP program! At the beginning of this book, we described PHP and MySQL. .. program ends, PHP provides the mysql_ close() function The mysql_ close() function closes the connection to the MySQL server referenced by the link Format bool mysql_ close ( [resource link_identifier]   Example: mysql_ close($link); Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark Example 15.1 < ?php print "Opening the connection to the database server< br />"; 1 $link = mysql_ connect("localhost",... mysql_ affected_rows(), and so on You can also use the built-in error-handling functions to find out where a query failed You can test that your SQL statement is valid by executing it in any other client, such as the mysql command line For INSERT, UPDATE, and DELETE, this function will return TRUE if the operation was successful and FALSE otherwise Example 15.3 Code  View:   MySQL Query in PHP...  SQL  statement  you  would  type  in  the MySQL  Query   Browser  or  at  the mysql  command  line  It  can  also  contain  explicit  values  or  variables   evaluated by PHP  before  sending  the  query  to  the  database 4 The mysql_ query()  function  is  executed and  will  return  true  if  the  query  is  successful   and  false  if  not 5 The mysql_ affected_rows()  function  returns  the...  name) and  the  value  associated  with  it   Figure 15.5 Fetching a record as an associative array with the mysql_ fetch_assoc() function Output from Example 15.5   15.1.5 Other Useful MySQL Functions PHP comes with a few more built-in MySQL functions In this section we look at some other commonly used ones Table 15.1 lists some of the MySQL functions you might find useful when integrating PHP and MySQL. .. the database server, and having selected a database, it is time to start executing SQL commands PHP provides the mysql_ query() function to perform database queries You must have adequate permissions to execute queries on a given database (see “The Grant and Revoke Commands” on page 589) Format resource mysql_ query ( string query [, resource link_identifier] )   Example: $result = mysql_ query("SELECT... SQL language, you can talk to your database In the next chapter, we learn how to use PHP functions to connect to the MySQL server and retrieve and display data from a database using the SQL statements Chapter 14 Lab 1 Go  to  the MySQL  console and  use  the  show  command  to  list  all  the  databases  Use   the mysql  database  Now  display  all  of  its  tables 2 Create  a  new  database  called... when integrating PHP and MySQL Table 15.1 MySQL Functions Database  Function What  It  Does mysql_ connect() Opens  a  connection  to  a MySQL  server mysql_ pconnect() Opens  a  persistent  connection mysql_ selectdb() Selects  the  default  database mysql_ change_user() Changes  the  identity  of  the  user  logged  on mysql_ list_dbs Lists  databases  for  this MySQL  server Please purchase PDF Split-Merge... 15.1 MySQL Functions Database  Function What  It  Does mysql_ list_tables Lists  tables  in  the  database Query  Functions  Affecting  Rows mysql_ fetch_assoc() Returns  one  result  row,  as  an  associative  array mysql_ fetch_row() Returns  one  result  row,  as  an  array mysql_ affected_rows() Returns  number  of  rows  affected by  query mysql_ num_rows() Returns  number  of  rows  selected mysql_ fetch_object()... Shippers"); $result = mysql_ query("DESCRIBE Shippers"); For the SELECT, SHOW, DESCRIBE, or EXPLAIN statements, mysql_ query() returns a resource on success, or FALSE on error For other types of SQL statements (UPDATE, DELETE, DROP, etc.), mysql_ query() returns TRUE on success or FALSE on error PHP provides a number of functions to deal with the result, such as mysql_ fetch_array(), mysql_ num_rows(), mysql_ affected_rows(), . server and information, and so on. They return a result-set. Functions are vendor specific, meaning functions supported by MySQL might not be supported by. sec) 14.4.3. Date and Time Functions To get the date and time, MySQL provides the functions shown in Table 14.6. Table 14.6. MySQL Date and Time Functions

Ngày đăng: 21/01/2014, 09:20

Từ khóa liên quan

Mục lục

  • PHP & MySQL by Example

  • Copyright

    • Preface

    • Acknowledgments

    • Chapter 1

      • 1.1. From Static to Dynamic Web Sites

        • 1.1.1. Static Web Sites

        • 1.1.2. Dynamic Web Sites

        • 1.1.3. What Is Open Source?

        • 1.2. About PHP

          • 1.2.1. Where to Get PHP and Documentation

          • 1.3. About MySQL

            • 1.3.1. Where to Get MySQL and Documentation

            • 1.3.2. Features of MySQL

            • 1.3.3. How to Install MySQL and PHP

            • 1.3.4. Advantages of MySQL and PHP

            • 1.4. Chapter Summary

              • 1.4.1. What You Should Know

              • 1.4.2. What’s Next?

              • Chapter 2

                • 2.1. The Life Cycle of a Web Page

                  • 2.1.1. Analysis of a Web Page

                  • 2.2. The Anatomy of a PHP Script

                    • 2.2.1. The Steps of Writing a PHP Script

                    • 2.3. Some Things to Consider

                      • 2.3.1. PHP and HTML Are Different Languages

                      • 2.3.2. Statements, Whitespace, and Line Breaks

                      • 2.3.3. Comments

                      • 2.3.4. Using PHP Functions

                      • 2.4. Review

                        • 2.4.1. PHP on the Command Line

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan