Birden çok SQL ifadeleri ile PHP / SQLite: $ db-> Query () çalışır, $ this-> db_sqlite-> query () başarısız

2 Cevap php

Ben çeşitli SQLite eylemleri işleyen bir sınıf oluşturma. Benim sorunum: Ben birden fazla tablolar ile bir SQL dizesi yaptığınızda standart PHP => $ db-> query () kullanılarak o zaman çalışır ... ama yöntem aynı istekte zaman başarısız olur. ";" Benim SQL deyiminde-sembolün o OO yöntemi ilk sonra her şeyi atlar gibi görünüyor. Neden olduğunu ve nasıl düzeltebilirim?

Teşekkürler.

// 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');
");

Tam bir örnek:

<?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();
?>

Output:
1 - Via class one line 1 (correct)
2 - Via class one line 2 (correct) 3 - Via class multi-lines 1 (incorrect)
4 - Direct multi-lines 1 (correct)
5 - Direct multi-lines 2 (correct)

2 Cevap

Kullanıldığı takdirde, sadece ilk SQL deyimi - sqlite_query() için PHP kılavuzu sayfası bu işlevin sonucu kullanılmaz sadece çalışır ... ", bir işlev çağrısı birden ifadeleri kullanma hakkında diyor idam olurdu. " Eğer sonuç dönen konum beri, bunu "kullanma" demektir. Her neyse, benim tahminim.

Herhangi bir hata oluşursa, kurulacak bir errorMsg tutucu değişken geçirebilirsiniz. Bu sqlite Orada bir şey dönerse kontrol etmek iyi bir fikir olabilir:

syntax: query ( string $query [, int $result_type [, string &$error_msg ]] )

$ Sonuç_türü SQLITE_BOTH (varsayılan) olabilir