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

PHP MySQL 數據插入實戰:從失敗案例看參數綁定與類型轉換的重要性

     編輯:PHP 相關知識

一個典型的「插入失敗」案例,揭示了 SQL 拼接、數據類型匹配、錯誤排查的核心教訓。

問題代碼

$ostype = $_POST['ostype'];
$uuid = $_POST['uuid'];
$nowtime = time(); // 時間戳
// ...
$result = mysql_query("INSERT INTO t_dblocal_userinformation (ID, OSTYPE, UUID, LASTDATE) VALUES (NULL, $ostype, $uuid, $nowtime)");

三大致命錯誤

  1. 字符串值缺引號:$ostype、$uuid 未加引號,導致 SQL 語法錯誤。
    修正:VALUES (NULL, '$ostype', '$uuid', ...)
  2. 時間類型不匹配:time() 返回整數時間戳,但表字段 LASTDATE 為 DATE 或 DATETIME 類型。
    修正:$nowtime = date('Y-m-d'); 或 date('Y-m-d H:i:s')。
  3. 使用已棄用的 mysql_* 擴展:PHP 5.5+ 棄用,7.0+ 移除,必須改用 PDO 或 mysqli。

現代最佳實踐(PDO + 預處理)

$pdo = new PDO("mysql:host=localhost;dbname=xxx", $user, $pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt = $pdo->prepare("INSERT INTO t_dblocal_userinformation (OSTYPE, UUID, LASTDATE) VALUES (?, ?, ?)");
$stmt->execute([$ostype, $uuid, date('Y-m-d H:i:s')]);

echo json_encode(['code' => 1000, 'message' => '插入成功']);

優勢

  • 參數綁定自動處理引號、轉義,防 SQL 注入。
  • 類型由驅動層協商,避免手工格式化錯誤。
  • 異常模式統一錯誤處理,便於調試與監控。

核心教訓:永遠不要直接拼接變量進 SQL;永遠使用預處理語句;永遠檢查數據庫字段類型與輸入值類型一致性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved