修改留言板的数据库数据表,让ID称为主键并且自增
现在的数据表结构如下:
mysql> desc messages; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | datetime | datetime | YES | | NULL | | | name | varchar(30) | YES | | NULL | | | email | varchar(50) | YES | | NULL | | | content | text | YES | | NULL | | +----------+-------------+------+-----+---------+-------+ 5 rows in set (0.00 sec)
存在两个问题:
1、我的id列可以为空,这是一个风险
2、id列不是主键,没法保证他的内容的唯一性
下面我们对表格进行一下小小的修改:
//修改id列,非空、自增、主键
alter table messages change id id int not null auto_increment first, add primary key (id);
(关于ALTER TABLE的其他详细用法可详见 《MySQL 5.1参考手册》 http://doc.mysql.cn/mysql5/refman-5.1-zh.html-chapter/sql-syntax.html#alter-table )
okay,我们的数据表现在变成了这样:
mysql> desc messages; +----------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | datetime | datetime | YES | | NULL | | | name | varchar(30) | YES | | NULL | | | email | varchar(50) | YES | | NULL | | | content | text | YES | | NULL | | +----------+-------------+------+-----+---------+----------------+ 5 rows in set (0.00 sec)
Great!同时我们需要对 publish.php 进行一个小小的修改:
#publish.php //删除以下片段 //有了数据库的ID主键、自增、非空,我们就不需要手动验证内容了 //获得SQL语句: 获取表格中ID最大值 $query = "select max(id) from $db_table_name"; //向数据库请求 $result = mysqli_query($dbc, $query); //验证表中是否有内容 if($row = mysqli_fetch_array($result)) { //如有ID,将现有ID自增1 $id = $row['max(id)'] + 1; }else{ //如无ID,将ID设为1 $id = 1; } //删除以上代码 //修改以下代码 //向数据表中添加数据 $query = "insert into $db_table_name (id, datetime, name, email, content) values ('$id', '$datetime', '$name', '$email', '$content');"; //修改为 $query = "insert into $db_table_name (datetime, name, email, content) values ('$datetime', '$name', '$email', '$content');";
测试结果如下:
成功运作!
目前专注学习PHP&MySQL。