心血来潮想做一个网站,具体干什么暂时还是不透露了,因为我也不确定能不能搞出来,这不,刚开始就踩到坑了。

这算是第一次近距离接触SQLite吧,算是脱离文本数据库的一小步(虽然SQLite也有类似文本数据库的味道),第一次用php+sql,操作起来有点小激动,按照教程来做,感觉无比顺利,成功完成了增删改查,于是打算开始着手写点什么,比如一个简单的记事本。

Runoob给的创建表的代码如下:

$sql =<<<EOF
            CREATE TABLE COMPANY (
                ID                 INT             PRIMARY KEY            NOT NULL,
                NAME          TEXT           NOT NULL,
                AGE              INT             NOT NULL,
                ADDRESS     CHAR(50),
                SALARY        REAL
            );
EOF;

然后数据是这么插入的:

$sql =<<<EOF
            INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
            VALUES (1, 'Paul', 32, 'California', 20000.00 );

            INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
            VALUES (2, 'Mark', 25, 'Rich-Mond ', 65000.00 );
EOF;

按照这种方式创建的表,再执行插入,我发现ID字段并不能自动增加,难道要每次都手动给一个ID?那岂不太坑了,于是想着当初学MSSQL的时候有自增ID这一说,上网搜了一下,发现了 INTEGER PRIMARY KEY AUTOINCREMENT 但是实际应用中,我怎么都没有正确插入值,疯狂郁闷。

事情真是莫名其妙,刚试了一下,竟然神奇的可以自增了,好吧,不管那么多了,能正常用就可以,下面列出我的代码,仅供参考:

<?php
//配置(创建)数据库
class MyDB extends SQLite3
{
     function __construct()
     {
            $this->open('test.db');
     }
}
$db = new MyDB();
if(!$db){
     echo $db->lastErrorMsg().'<br>';
} else {
     echo "卧槽,竟然打开了<br>";
}
/*
下面就要创建一个叫 COMPANY 的表,如果存在则插入,不存在则创建
-- 创建ID列,int类型,主键,自增
-- 昵称,text类型,不允许为空
-- 年龄
-- 地址,最多50字
-- 薪水
*/
$sql =<<<EOF
        CREATE TABLE COMPANY (
        ID              INTEGER             PRIMARY KEY          AUTOINCREMENT,
        NAME            TEXT            NOT NULL,
        AGE             INT             NOT NULL,
        ADDRESS         CHAR(50),
        SALARY          REAL
        );
EOF;

$ret = $db->exec($sql);
if(!$ret){
        echo $db->lastErrorMsg().'<br>';
} else {
        echo "不错,表(zi)创建成功了<br>";
}

     $sql =<<<EOF
            INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)
            VALUES ('Paulsada', 32, 'Calfornia', 200.00 );
EOF;

     $ret = $db->exec($sql);
     if(!$ret){
            echo $db->lastErrorMsg().'<br>';
     } else {
            echo "666,这条数据也插入成功了<br><br>";
     }


$sql =<<<EOF
        SELECT * from COMPANY;
EOF;

     $ret = $db->query($sql);
     while($row = $ret->fetchArray(SQLITE3_ASSOC) ){
            echo "ID = ". $row['ID'] . "<br>";
            echo "NAME = ". $row['NAME'] ."<br>";
            echo "ADDRESS = ". $row['ADDRESS'] ."<br>";
            echo "SALARY =  ".$row['SALARY'] ."<br><br>";
     }
     echo "简直没谁了,竟然从库里读出来了数据<br>";

     $db->close();
?>

标签: sql, sqlite, 主键, 数据库, 自增主键

已有 31 条评论

  1. 沙发#[滑稽]

  2. 看不懂- -

  3. 大神......不是我等能够明白的~哈哈!

  4. 前排瓜子花生八宝粥可乐汽水出售

  5. 在下佩服!

  6. 我头像怎么不见了

    1. 邮箱可能错了

  7. 可以尝试用些框架,如Laravel

    1. PHP也不会呢- -,Laravel我嫌弃太大了,想体验Slim,找了一个Slim的程序,安装完死活运行不了

  8. 个人觉得,你这个前后端分离的博客程序,应该蛮受欢迎的。跟wp静态的意思差不多,不过前后端分2个主机。

    1. 难道WP不是前后端分离?分两个主机,需要用mysql这样的数据库,sql可以单独放一个服务器上,前后端共同调取

      1. wp那样不叫分离。我说的分离,是前端只需要支持html就行。跟现在支持全静态的cms差不多意思,只是那些作为博客不好。

        1. 靠谱么,那怎么改样式。。。

  9. 博客现在的评论方式很喜欢,终于不用全屏打开评论了(*๓´╰╯`๓)♡

    1. 是吧,之前全屏有BUG,我懒得调

  10. 据说sqlite的功能比起mysql来说弱很多,功能上也差得远。如果不是机器性能太差没必要用。

    1. 语句支持少,不过小项目可以体验体验,我只用过MSSQL

  11. 呵呵,不研究。

  12. 厉害啊

  13. 好久没来新文章了,以来就这么深奥,表示不懂,但是继续支持

  14. 到底是什么站呢?很期待哎。莫非是H站,(#滑稽)

  15. c c

    强烈建议mysql,sqlite数据存多了以后备份起来很费劲……

    1. sql压缩很恐怖哇,30+压缩到了5m,不知道sqlite能不能压缩到这种程度

  16. 窝主站数据库换成了MariaDB……虽然没啥异样的感觉2333

    1. 跟mysql一样,你想有什么异样…

  17. MG MG

    现在看到SQLite就想到ghost了。。。。

  18. 好久不来,每月一更~^^

  19. SQLite 设置 auto crement不就是自增吗?

    1. 你试试。。。好像不是。。。

      1. 貌似写错了,是 auto incremnet,没有错的,android就是用的SQLite数据

        1. AUTOINCREMENT

          我就是这么用的- -

添加新评论