問題代碼
$result = mysql_query('insert into anweisong(id,name) values('3','xxx');');
錯誤分析
- SQL 語法錯誤:字符串拼接導致單引號衝突。PHP 中單引號字符串內不能直接包含單引號,需轉義或雙引號包裹。
正確寫法:
$sql = "insert into anweisong(id,name) values('3','xxx');";
或 $sql = 'insert into anweisong(id,name) values(\"3\",\"xxx\");';
- mysql_* 函數已棄用:PHP 5.5+ 棄用,7.0+ 移除。應改用
mysqli 或 PDO。
- 權限/連線問題:本地 DOS 能執行,腳本失敗可能是 Web 服務器用戶無資料庫權限、或
mysql_connect 參數錯誤(密碼為空?)。
修正版代碼
$link = mysqli_connect('localhost', 'root', '', 'an');
if (!$link) die('連接失敗: ' . mysqli_connect_error());
$sql = "INSERT INTO anweisong (id, name) VALUES ('3', 'xxx')";
if (mysqli_query($link, $sql)) {
echo 'insert success!';
} else {
echo 'fail: ' . mysqli_error($link);
}
mysqli_close($link);
最佳實踐
- 使用 預處理語句 防注入:
$stmt = $link->prepare("INSERT INTO ... VALUES (?, ?)");
- 錯誤日誌記錄
mysqli_error()、mysqli_errno()。
- 資料庫用戶最小權限原則(僅需 INSERT 權限)。
參考教程
W3School PHP MySQL 入門