wordpress / db.php
CatPtain's picture
Upload 4 files
bf47729 verified
raw
history blame
3.96 kB
<?php
/**
* SQLite integration for WordPress
* This file enables WordPress to use SQLite database instead of MySQL
*/
// Prevent direct access
if (!defined('ABSPATH')) {
exit;
}
// Check if SQLite extension is available
if (!extension_loaded('pdo_sqlite')) {
wp_die('SQLite PDO extension is not available. Please install php-sqlite3.');
}
// Define SQLite database path
if (!defined('DB_FILE')) {
define('DB_FILE', ABSPATH . 'wp-content/database/wordpress.db');
}
// Create database directory if it doesn't exist
$db_dir = dirname(DB_FILE);
if (!file_exists($db_dir)) {
wp_mkdir_p($db_dir);
}
/**
* Custom database class for SQLite
*/
class SQLite_DB {
private $pdo;
private $last_error = '';
private $last_insert_id = 0;
private $num_rows = 0;
public function __construct() {
$this->connect();
}
private function connect() {
try {
$this->pdo = new PDO('sqlite:' . DB_FILE);
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->pdo->exec('PRAGMA foreign_keys = ON');
} catch (PDOException $e) {
$this->last_error = $e->getMessage();
wp_die('Database connection failed: ' . $this->last_error);
}
}
public function query($sql) {
try {
// Convert MySQL syntax to SQLite
$sql = $this->mysql_to_sqlite($sql);
$stmt = $this->pdo->prepare($sql);
$result = $stmt->execute();
if ($result) {
$this->last_insert_id = $this->pdo->lastInsertId();
$this->num_rows = $stmt->rowCount();
return $stmt;
}
return false;
} catch (PDOException $e) {
$this->last_error = $e->getMessage();
return false;
}
}
private function mysql_to_sqlite($sql) {
// Basic MySQL to SQLite conversion
$sql = str_replace('`', '"', $sql);
$sql = preg_replace('/AUTO_INCREMENT/i', 'AUTOINCREMENT', $sql);
$sql = preg_replace('/INT\(\d+\)/i', 'INTEGER', $sql);
$sql = preg_replace('/TINYINT\(\d+\)/i', 'INTEGER', $sql);
$sql = preg_replace('/BIGINT\(\d+\)/i', 'INTEGER', $sql);
$sql = preg_replace('/VARCHAR\((\d+)\)/i', 'TEXT', $sql);
$sql = preg_replace('/LONGTEXT/i', 'TEXT', $sql);
$sql = preg_replace('/DATETIME/i', 'TEXT', $sql);
$sql = preg_replace('/TIMESTAMP/i', 'TEXT', $sql);
return $sql;
}
public function get_results($sql, $output = OBJECT) {
$stmt = $this->query($sql);
if (!$stmt) return null;
$results = [];
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
if ($output === OBJECT) {
$results[] = (object) $row;
} else {
$results[] = $row;
}
}
return $results;
}
public function get_row($sql, $output = OBJECT) {
$stmt = $this->query($sql);
if (!$stmt) return null;
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$row) return null;
if ($output === OBJECT) {
return (object) $row;
}
return $row;
}
public function get_var($sql) {
$stmt = $this->query($sql);
if (!$stmt) return null;
$row = $stmt->fetch(PDO::FETCH_NUM);
return $row ? $row[0] : null;
}
public function insert_id() {
return $this->last_insert_id;
}
public function last_error() {
return $this->last_error;
}
public function num_rows() {
return $this->num_rows;
}
}
// Initialize SQLite database connection
$wpdb = new SQLite_DB();
// WordPress database compatibility
if (!isset($GLOBALS['wpdb'])) {
$GLOBALS['wpdb'] = $wpdb;
}