【发布时间】:2009-11-05 20:36:41
【问题描述】:
我正在创建一个处理各种 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');
");
完整示例:
<?php
class db_sqlite {
function __construct() {
$this->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] ."<br>";
}
}
}
$something = new something();
$something->setup();
?>
输出:
1 - 通过第一类线路 1(正确)
2 - 通过第一类线路 2(正确)
3 - 通过类多行 1(不正确)
4 - 直接多行 1(正确)
5 - 直接多行 2(正确)
【问题讨论】: