問題代碼片段
$sql = "INSERT INTO `yhy100`(`id`,`title`,`dates`,`contents`) VALUES (NULL,'$title',NOW(),'$con')";
mysql_query($sql);
if (mysql_query($sql)) { echo "插入成功"; } else { echo "插入失敗"; }
主要錯誤
- 重複執行:
mysql_query($sql) 執行兩次,第一次插入,第二次因主鍵衝突或語法失敗返回 false。
- 無錯誤輸出:未打印
mysql_error(),無法定位具體原因。
- SQL 注入風險:直接拼接變量,應用
mysql_real_escape_string 或改用 PDO/Prepared Statements。
- 編碼不一致:資料表/連接字符集需統一(utf8mb4 推薦)。
修正代碼
$link = mysql_connect("localhost:3306","root","123456") or die("連接失敗: ".mysql_error());
mysql_select_db("yhy") or die("選庫失敗: ".mysql_error());
mysql_set_charset("utf8mb4");
$title = mysql_real_escape_string($_POST['title']);
$con = mysql_real_escape_string($_POST['con']);
$sql = "INSERT INTO `yhy100`(`title`,`dates`,`contents`) VALUES ('$title',NOW(),'$con')";
if (mysql_query($sql)) {
echo "插入成功,ID: ".mysql_insert_id();
} else {
echo "插入失敗: ".mysql_error(); // 關鍵:輸出具體錯誤
}
進階建議
- 棄用 mysql_*:PHP 7+ 已移除,改用 PDO 或 mysqli。
- 使用預處理語句防注入:
$stmt = $pdo->prepare("INSERT INTO yhy100(title,contents) VALUES(?,?)");
$stmt->execute([$title, $con]);