当前位置:  开发笔记 > 编程语言 > 正文

带有多个SQL语句的PHP/SQLite:$ db-> Query()有效,$ this-> db_sqlite-> query()失败

如何解决《带有多个SQL语句的PHP/SQLite:$db->Query()有效,$this->db_sqlite->query()失败》经验,为你挑选了1个好方法。

我正在创建一个处理各种SQLite操作的类.我的问题是:当我创建一个包含多个语句的SQL字符串时,它在使用标准PHP => $ db-> query()时起作用...但是当从方法发出相同的请求时它会失败.似乎OO方法在我的SQL语句中第一个";" - 符号之后跳过所有内容.为什么这样,以及如何解决它?

谢谢.

// Fails - line 2 is not inserted, why?
$this->db_sqlite->query("
    INSERT INTO foo (name) VALUES('Via class multi-lines 1');
    INSERT INTO foo (name) VALUES('Via class multi-lines 2');
");

// Works - both lines are inserted.
$GLOBALS[db]->query("
    INSERT INTO foo (name) VALUES('Direct multi-lines 1');
    INSERT INTO foo (name) VALUES('Direct multi-lines 2');
");

完整示例:

connect();
    }

    function connect() {
        $GLOBALS[db] = new SQLiteDatabase("dbsqlite.php.db");
    }

    function query($sql) {
        return $GLOBALS[db]->query($sql);
    }

}


class something {

    function setup() {
        $this->db_sqlite = new db_sqlite();

        $this->db_sqlite->query("CREATE TABLE foo ( id INTEGER PRIMARY KEY, name CHAR(255) );");

        // Works
        $this->db_sqlite->query("INSERT INTO foo (name) VALUES('Via class one line 1');");
        $this->db_sqlite->query("INSERT INTO foo (name) VALUES('Via class one line 2');");

        // Fails (why?)
        $this->db_sqlite->query("
            INSERT INTO foo (name) VALUES('Via class multi-lines 1');
            INSERT INTO foo (name) VALUES('Via class multi-lines 2');
        ");

        // Works
        $GLOBALS[db]->query("
            INSERT INTO foo (name) VALUES('Direct multi-lines 1');
            INSERT INTO foo (name) VALUES('Direct multi-lines 2');
        ");

        foreach($this->db_sqlite->query("SELECT * FROM foo") as $v) {
            echo $v[id] . " - " . $v[name] ."
"; } } } $something = new something(); $something->setup(); ?>

输出:
1 - 通过第1类线1(正确)
2 - 通过第1类线2(正确)3 - 通过类多线1(不正确)
4 - 直接多线1(正确)
5 - 直接多线2 (正确)



1> GZipp..:

sqlite_query()的PHP手册页说,关于在一个函数调用中使用多个语句,"...仅当未使用函数的结果时才起作用 - 如果使用它,则只执行第一个SQL语句. " 由于您返回结果,因此您正在"使用"它.无论如何,这是我的猜测.

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有