다양한 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 - 3 2 (올바른) 분류 한 라인을 통해 - - 멀티 클래스를 통해
2 1 (올바른) 분류 한 거쳐서 라인 1 (올바르지 않음)
4 - 직접 멀티 라인 1 (올바른)
5 - 직접 멀티 라인 2 (올바른)
감사드립니다. 이렇게하면 여러 개의 쿼리가 실행되고 결과는 반환되지 않습니다. $ GLOBALS [db] -> queryExec ($ sql) ... 또한 클래스 메서드로 작동합니다. –