Je crée une classe qui gère diverses actions SQLite. Mon problème est le suivant: Quand je crée une chaîne SQL avec plusieurs instructions, cela fonctionne quand on utilise PHP standard => $ db-> query() ... mais cela échoue lorsqu'on fait la même requête depuis une méthode. Il semble que la méthode OO saute tout après le premier ";" - symbole dans mon instruction SQL. Pourquoi est-ce, et comment le réparer?
Merci.
// 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');
");
exemple complet:
<?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();
?>
sortie:
1 - Via classe une ligne 1 (correct)
2 - Via classe une ligne 2 (correct) 3 - Via classe multi- lignes 1 (incorrect)
4 - Lignes multiples directes 1 (correct)
5 - Lignes multiples directes 2 (corrects)
Merci pour votre référence. Cela lancera plusieurs requêtes (ne renvoie aucun résultat): $ GLOBALS [db] -> queryExec ($ sql) ... et cela fonctionne aussi comme une méthode de classe. –