向 MySQL 資料表寫入資料需使用 INSERT INTO 命令,同樣支援命令列互動模式與 PHP 腳本整合。本文將詳細說明語法規則、字串處理注意事項、命令列多筆插入示範,以及 PHP 表單處理與防注入實務。
INSERT INTO table_name (field1, field2,...fieldN) VALUES (value1, value2,...valueN);
關鍵規則:字串型欄位的值必須用單引號或雙引號包裹(如 'value')。
root@host# mysql -u root -p password
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> INSERT INTO tutorials_tbl
->(tutorial_title, tutorial_author, submission_date)
->VALUES
->("Learn PHP", "John Poul", NOW());
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO tutorials_tbl
->(tutorial_title, tutorial_author, submission_date)
->VALUES
->("Learn MySQL", "Abdul S", NOW());
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO tutorials_tbl
->(tutorial_title, tutorial_author, submission_date)
->VALUES
->("JAVA Tutorial", "Sanjay", '2007-05-06');
Query OK, 1 row affected (0.01 sec)
mysql>
提示:提示符出現的 -> 箭頭非 SQL 一部分,僅表示換行續行;直到遇到分號 ; 才會執行。
範例中未指定 tutorial_id,因該欄位定義為 AUTO_INCREMENT,MySQL 會自動遞增。NOW() 為取得目前日期時間的內建函式。
以下程式碼示範透過 HTML 表單接收使用者輸入,經過魔術引號檢查與 addslashes() 轉義後寫入資料庫:
<html>
<head>
<title>Add New Record in MySQL Database</title>
</head>
<body>
<?php
if(isset($_POST['add'])) {
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ) {
die('Could not connect: ' . mysql_error());
}
// 處理魔術引號相容性
if(! get_magic_quotes_gpc() ) {
$tutorial_title = addslashes($_POST['tutorial_title']);
$tutorial_author = addslashes($_POST['tutorial_author']);
} else {
$tutorial_title = $_POST['tutorial_title'];
$tutorial_author = $_POST['tutorial_author'];
}
$submission_date = $_POST['submission_date'];
$sql = "INSERT INTO tutorials_tbl
(tutorial_title, tutorial_author, submission_date)
VALUES
('$tutorial_title','$tutorial_author','$submission_date')";
mysql_select_db('TUTORIALS');
$retval = mysql_query($sql, $conn);
if(! $retval ) {
die('Could not enter data: ' . mysql_error());
}
echo "Entered data successfully\n";
mysql_close($conn);
} else {
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<table width="600" border="0" cellspacing="1" cellpadding="2">
<tr>
<td width="250">Tutorial Title</td>
<td><input name="tutorial_title" type="text" id="tutorial_title"></td>
</tr>
<tr>
<td width="250">Tutorial Author</td>
<td><input name="tutorial_author" type="text" id="tutorial_author"></td>
</tr>
<tr>
<td width="250">Submission Date [ yyyy-mm-dd ]</td>
<td><input name="submission_date" type="text" id="submission_date"></td>
</tr>
<tr>
<td width="250"></td>
<td><input name="add" type="submit" id="add" value="Add Tutorial"></td>
</tr>
</table>
</form>
<?php } ?>
</body>
</html>
get_magic_quotes_gpc() 檢查 PHP 設定,若關閉則手動呼叫 addslashes() 轉義單引號、雙引號、反斜線與 NUL 字元,降低 SQL 注入風險。