熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> MySQL >> 正文

PHP中操作MySQL的一些要注意的問題

2013-11-12 23:40:22  來源: MySQL 

  對於 MySQL 第一件你必須牢記的是它的每一行命令都是用分號 (;) 作為結束的但……沒有完全絕對的事在這兒也是一樣當一行 MySQL 被插入在 PHP 代碼中時最好把後面的分號省略掉例如
  
  mysql_query (INSERT INTO tablename (first_name last_name) VALUES ($first_name $last_name));
  
  這是因為 PHP 也是以分號作為一行的結束的額外的分號有時會讓 PHP 的語法分析器搞不明白所以還是省略掉的好在這種情況下雖然省略了分號但是 PHP 在執行 MySQL 命令時會自動的幫你加上的
  
  另外還有一個不要加分號的情況當你想把要字段的豎者排列顯示下來而不是像通常的那樣橫著排列時你可以用 G 來結束一行 SQL 語句這時就用不上分號了例如
  
  SELECT * FROM PENPALS WHERE USER_ID = G
  
  TEXTDATE和 SET 數據類型
  
  MySQL 數據表的字段必須有定義一個數據類型這有大約 種選擇大部分都是直接明了的就不多費口舌了但有幾個有必要提一下
  
  TEXT 不是一種數據類型雖然可能有些書上是這麼說的它實際上應該是 LONG VARCHAR 或者 MEDIUMTEXT
  
  DATE 數據類型的格式是 YYYYMMDD 比如 你可以很容易的用 date 函數來得到這種格式的當前系統時間 date(Ymd)
  
  並且在 DATA 數據類型之間可以作減法得到相差的時間天數
  
  $age = ($current_date $birthdate);
  
  集合 SET 是一個有用的數據類型它和枚舉 ENUM 有點相似只不過是 SET 能夠保存多個值而 ENUM 只能保存一個值而已而且 SET 類型最多只能夠有 個預定的值而 ENUM 類型卻能夠處理最多 個預定義的值而如果需要有大於 個值的集合該怎麼辦呢?這時就需要定義多個集合來一起解決這個問題了
  
  通配符
  
  SQL 的通配符有兩種 * % 分別用在不同的情況下例如如果你想看到數據庫的所有內容可以像這樣來查詢
  
  SELECT * FROM dbname WHERE USER_ID LIKE %;
  
  這兒兩個通配符都被用上了他們表示相同的意思 ?? 都是用來匹配任何的字符串但是他們用在不同的上下文中 * 用來匹配字段名 % 用來匹配字段值另外一個不容易引起注意的地方是 % 通配符需要和 LIKE 關鍵字一起使用
  
  還有一個通配符就是下劃線 _ 它代表的意思和上面不同是用來匹配任何單個的字符的
  
  NOT NULL 和空記錄
  
  如果用戶在沒有填任何東西的情況下按了 submit 按鈕會怎樣呢?如果你確實需要一個值那麼可以用客戶端腳本或者服務器端腳本來進行數據驗證這一點在前面已經說過了但是在數據庫中卻是允許一些字段被空出來什麼也不填對此類紀錄 MySQL 將要為之執行一些事情插入值 NULL 這是缺省的操作
  
  如果你在字段定義中為之聲明了 NOT NULL (在建立或者修改這個字段的時候) MySQL 將把這個字段空出來什麼東西也不填對於一個 ENUM 枚舉類型的字段如果你為之聲明了 NOT NULL MySQL 將把枚舉集的第一個值插入到字段中也就是說 MySQL 把枚舉集的第一個值作為這個枚舉類型的缺省值
  
  一個值為 NULL 的紀錄和一個空紀錄是有一些區別的 % 通配符可以匹配空紀錄但是卻不能匹配 NULL 紀錄在某些時候這種區別會造成一些意想不到的後果就我的經驗而言任何字段都應該聲明為 NOT NULL 這樣下面的 SELECT 查詢語句就能夠正常運轉了
  
  if (!$CITY) {$CITY = %;}
  
  $selectresult = mysql_query (SELECT * FROM dbname
  WHERE FIRST_NAME =
  AND LAST_NAME = 如風
  AND CITY LIKE $CITY
  );
  
  在第一行中如果用戶沒有指定一個 CITY 值那麼就會用通配符 % 來代入 CITY 變量這樣搜索時就會把任何的 CITY 值都考慮進去甚至包括那些 CITY 字段為空的紀錄
  
  但是如果有一些紀錄它的 CITY 字段值是 NULL 這時問題就出現了上面的查詢是不能夠找到這些字段的問題的一個解決辦法可以是這樣
  
  if (!$CITY) { $CITY = %; }
  
  $selectresult = mysql_query (SELECT * FROM dbname
  WHERE FIRST_NAME =
  AND LAST_NAME = 如風
  AND (CITY LIKE $CITY OR CITY IS NULL)
  );
  
  注意在搜索 NULL 時必須用 IS 關鍵字而 LIKE 時不會正常工作的
  
  在最後要提到的是如果你在加入或者修改一個新的字段之前數據庫中已經有了一些記錄了這時新加入的字段在原來的紀錄中的值可能是 NULL 也可能為空這也算是 MySQL 的一個 Bug 吧所以在這種情況下使用 SELECT 查詢要特別的小心
From:http://tw.wingwit.com/Article/program/MySQL/201311/11206.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.