首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 與 MySQL 運作細節深度解析:SQL 結束符、資料型別、通配符、NULL 處理

     編輯:PHP 綜合知識

SQL 陳述式結束符號

  • MySQL 客戶端:分號 ; 結束
  • PHP 字串中執行:省略分號,PHP 會自動補上,避免語法分析器混淆
  • 垂直顯示結果:\G 替代分號 (僅限 mysql 客戶端)

常見資料型別細節

通配符完整對照

型別說明注意事項
TEXT非標準型別,實為 LONG VARCHAR / MEDIUMTEXT用 VARCHAR(65535) 或對應 TEXT 系列
DATE格式 YYYY-MM-DDPHP 產生:date('Y-m-d');可直接相減得天數差
SET可儲存多個預定值 (最多 64 個)超過 64 個需拆多欄位;ENUM 單值最多 65535 個
ENUM單值選擇NOT NULL 時預設為第一個值
符號用途搭配範例
%匹配任意長度字串 (含空字串)LIKEWHERE name LIKE '張%'
_匹配單一字元LIKEWHERE code LIKE 'A__'
*選取所有欄位SELECTSELECT * FROM t

註:% 僅能搭配 LIKE 使用,不可單獨用於 =。

NULL vs 空字串 關鍵差異

-- 插入不指定欄位
INSERT INTO t (col1) VALUES ('a'); -- col2 預設 NULL

-- 定義 NOT NULL
ALTER TABLE t MODIFY col2 VARCHAR(10) NOT NULL; -- 插入時若不給值會報錯

-- ENUM NOT NULL 預設第一個值
CREATE TABLE t (status ENUM('a','b') NOT NULL);
INSERT INTO t () VALUES (); -- status = 'a'

-- 查詢差異
SELECT * FROM t WHERE col = '';   -- 找到空字串,找不到 NULL
SELECT * FROM t WHERE col IS NULL; -- 找到 NULL,找不到空字串
SELECT * FROM t WHERE col LIKE '%'; -- 找到空字串,找不到 NULL

實務建議:全部欄位定義 NOT NULL

prepare('SELECT * FROM users WHERE city LIKE ? OR city IS NULL');
$stmt->execute([$city]);

// 或在資料庫層面預設空字串
ALTER TABLE users MODIFY city VARCHAR(50) NOT NULL DEFAULT '';

ALTER TABLE 既有資料的預設值陷阱

對已有資料的表新增欄位,舊列新欄位值可能為 NULL 或空字串 (視版本/引擎),導致查詢不一致。解法:

  1. 新增欄位時指定 NOT NULL DEFAULT ''
  2. 或分兩步:ADD COLUMN ... NULL → UPDATE SET col='' → MODIFY NOT NULL
  3. 查詢時永遠加上 OR col IS NULL 防禦

PHP 端最佳實踐

  • 使用 PDO 預備語句,參數自動處理型別
  • 輸入驗證:filter_var、ctype_*、正則
  • 日期統一用 DateTimeImmutable、資料庫存 DATE/DATETIME
  • 避免 SELECT *,明確列出欄位
  • 大量寫入用交易 + 批次 INSERT ... VALUES (...),(...),...
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved