[英]PHP PDO SQLite3 issue using “WITH” clause
我正在開發一個 PHP 項目,我必須在 SQLite3 數據庫中執行查詢。 為此,我正在使用 PHP PDO。 我的所有查詢都像魅力一樣,除了一個。 我正在談論的是遞歸 SQLite CTE。
這是聲明:
WITH data
AS (
SELECT 1 AS Level, id, number_of_processors nop, processor_type pt
FROM devices
UNION ALL
SELECT level + 1, data.id, nop, pt
FROM data INNER JOIN devices d ON (data.id = d.id)
WHERE level < nop )
SELECT id, level, pt AS processor_type FROM data ORDER BY id, level
我已經用“SQLite Manager”(Firefox 擴展)測試了這個語句,它在那里工作,但不適用於 PDO,也不適用於 php_sqlite3.dll。
我的環境是這樣配置的:
相關的 PHP 類是這樣的:
use \PDO;
use \PDOException;
class SQLiteDBConnector {
private $dbname = NULL;
private $db = NULL;
public function __construct( $dbname ) {
$this->dbname = $dbname;
return $this;
}
private function connect() {
try {
$this->db = new PDO( 'sqlite:' . $this->dbname );
$this->db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
} catch ( PDOException $e ) {
throw $e;
}
}
public function getConnection() {
if ( isset( $this->db ) === FALSE ) {
$this->connect();
}
return $this->db;
}
public function query( $stmt ) {
$resultset[] = array();
try {
$conn = $this->getConnection();
$prepStmt = $conn->prepare( $sqlStmt );
$prepStmt->execute();
while ( $row = $prepStmt->fetch( PDO::FETCH_ASSOC ) ) {
$resultset[] = $row;
}
} catch ( PDOException $e ) {
throw $e;
}
return $resultset;
}
}
這是來自 PDO 的答案:
SQLSTATE[HY000]: General error: 1 near "WITH": syntax error
有誰知道為什么會拋出 SQLSTATE 錯誤?
很有可能在 Windows 服務器上編譯的 SQLite 庫 PHP 版本不支持最近引入的公共表表達式。
要檢查庫的版本,請在服務器上執行此操作。
<?php print_r(SQLite3::version()); ?>
如果您從服務器上的命令行執行 SQLite,這不一定與您可能看到的版本號相同。 我認為您至少需要 3.8.3 版。
考慮升級服務器上的PHP; 當前版本是 5.6+。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.