Ecstasy

HTML, CSS, PHP, MySQL, LAMP;

导航

修改留言板的数据库数据表,让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');";

测试结果如下:

成功运作!

posted on 2013-08-30 17:08  Ecstasy  阅读(383)  评论(0编辑  收藏  举报