fix: split initDatabase() into separate exec() calls per table
MySQL/PDO doesn't support multiple CREATE TABLE statements in a single exec() call. Split into an array of individual statements with a loop. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
90
db.php
90
db.php
@@ -30,8 +30,10 @@ function getDb(): PDO {
|
|||||||
|
|
||||||
function initDatabase(): void {
|
function initDatabase(): void {
|
||||||
$db = getDb();
|
$db = getDb();
|
||||||
$db->exec("
|
|
||||||
CREATE TABLE IF NOT EXISTS companies (
|
// Jokainen CREATE TABLE omana exec()-kutsuna — MySQL/PDO ei tue useaa lausetta kerralla
|
||||||
|
$tables = [
|
||||||
|
"CREATE TABLE IF NOT EXISTS companies (
|
||||||
id VARCHAR(50) PRIMARY KEY,
|
id VARCHAR(50) PRIMARY KEY,
|
||||||
nimi VARCHAR(255) NOT NULL,
|
nimi VARCHAR(255) NOT NULL,
|
||||||
luotu DATETIME,
|
luotu DATETIME,
|
||||||
@@ -41,17 +43,17 @@ function initDatabase(): void {
|
|||||||
logo_file VARCHAR(255) DEFAULT '',
|
logo_file VARCHAR(255) DEFAULT '',
|
||||||
api_key VARCHAR(64) DEFAULT '',
|
api_key VARCHAR(64) DEFAULT '',
|
||||||
cors_origins TEXT DEFAULT ''
|
cors_origins TEXT DEFAULT ''
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4",
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS company_domains (
|
"CREATE TABLE IF NOT EXISTS company_domains (
|
||||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||||
company_id VARCHAR(50) NOT NULL,
|
company_id VARCHAR(50) NOT NULL,
|
||||||
domain VARCHAR(255) NOT NULL,
|
domain VARCHAR(255) NOT NULL,
|
||||||
FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE,
|
FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE,
|
||||||
UNIQUE KEY udx_domain (domain)
|
UNIQUE KEY udx_domain (domain)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4",
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS users (
|
"CREATE TABLE IF NOT EXISTS users (
|
||||||
id VARCHAR(20) PRIMARY KEY,
|
id VARCHAR(20) PRIMARY KEY,
|
||||||
username VARCHAR(100) NOT NULL UNIQUE,
|
username VARCHAR(100) NOT NULL UNIQUE,
|
||||||
password_hash VARCHAR(255) NOT NULL,
|
password_hash VARCHAR(255) NOT NULL,
|
||||||
@@ -59,46 +61,46 @@ function initDatabase(): void {
|
|||||||
role ENUM('admin','user') DEFAULT 'user',
|
role ENUM('admin','user') DEFAULT 'user',
|
||||||
email VARCHAR(255) DEFAULT '',
|
email VARCHAR(255) DEFAULT '',
|
||||||
luotu DATETIME
|
luotu DATETIME
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4",
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS user_companies (
|
"CREATE TABLE IF NOT EXISTS user_companies (
|
||||||
user_id VARCHAR(20) NOT NULL,
|
user_id VARCHAR(20) NOT NULL,
|
||||||
company_id VARCHAR(50) NOT NULL,
|
company_id VARCHAR(50) NOT NULL,
|
||||||
PRIMARY KEY (user_id, company_id),
|
PRIMARY KEY (user_id, company_id),
|
||||||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||||
FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE
|
FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE
|
||||||
) ENGINE=InnoDB;
|
) ENGINE=InnoDB",
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS user_signatures (
|
"CREATE TABLE IF NOT EXISTS user_signatures (
|
||||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||||
user_id VARCHAR(20) NOT NULL,
|
user_id VARCHAR(20) NOT NULL,
|
||||||
mailbox_id VARCHAR(20) NOT NULL,
|
mailbox_id VARCHAR(20) NOT NULL,
|
||||||
signature TEXT,
|
signature TEXT,
|
||||||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||||
UNIQUE KEY udx_user_mailbox (user_id, mailbox_id)
|
UNIQUE KEY udx_user_mailbox (user_id, mailbox_id)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4",
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS config (
|
"CREATE TABLE IF NOT EXISTS config (
|
||||||
config_key VARCHAR(100) PRIMARY KEY,
|
config_key VARCHAR(100) PRIMARY KEY,
|
||||||
config_value TEXT
|
config_value TEXT
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4",
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS reset_tokens (
|
"CREATE TABLE IF NOT EXISTS reset_tokens (
|
||||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||||
user_id VARCHAR(20) NOT NULL,
|
user_id VARCHAR(20) NOT NULL,
|
||||||
token VARCHAR(64) NOT NULL UNIQUE,
|
token VARCHAR(64) NOT NULL UNIQUE,
|
||||||
created_at DATETIME NOT NULL,
|
created_at DATETIME NOT NULL,
|
||||||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
||||||
) ENGINE=InnoDB;
|
) ENGINE=InnoDB",
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS login_attempts (
|
"CREATE TABLE IF NOT EXISTS login_attempts (
|
||||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||||
ip VARCHAR(45) NOT NULL,
|
ip VARCHAR(45) NOT NULL,
|
||||||
attempted_at DATETIME NOT NULL,
|
attempted_at DATETIME NOT NULL,
|
||||||
INDEX idx_ip_time (ip, attempted_at)
|
INDEX idx_ip_time (ip, attempted_at)
|
||||||
) ENGINE=InnoDB;
|
) ENGINE=InnoDB",
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS customers (
|
"CREATE TABLE IF NOT EXISTS customers (
|
||||||
id VARCHAR(20) PRIMARY KEY,
|
id VARCHAR(20) PRIMARY KEY,
|
||||||
company_id VARCHAR(50) NOT NULL,
|
company_id VARCHAR(50) NOT NULL,
|
||||||
yritys VARCHAR(255),
|
yritys VARCHAR(255),
|
||||||
@@ -118,9 +120,9 @@ function initDatabase(): void {
|
|||||||
muokkaaja VARCHAR(100) DEFAULT '',
|
muokkaaja VARCHAR(100) DEFAULT '',
|
||||||
FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE,
|
FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE,
|
||||||
INDEX idx_company (company_id)
|
INDEX idx_company (company_id)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4",
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS customer_connections (
|
"CREATE TABLE IF NOT EXISTS customer_connections (
|
||||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||||
customer_id VARCHAR(20) NOT NULL,
|
customer_id VARCHAR(20) NOT NULL,
|
||||||
asennusosoite VARCHAR(255) DEFAULT '',
|
asennusosoite VARCHAR(255) DEFAULT '',
|
||||||
@@ -131,9 +133,9 @@ function initDatabase(): void {
|
|||||||
sopimuskausi VARCHAR(100) DEFAULT '',
|
sopimuskausi VARCHAR(100) DEFAULT '',
|
||||||
alkupvm VARCHAR(20) DEFAULT '',
|
alkupvm VARCHAR(20) DEFAULT '',
|
||||||
FOREIGN KEY (customer_id) REFERENCES customers(id) ON DELETE CASCADE
|
FOREIGN KEY (customer_id) REFERENCES customers(id) ON DELETE CASCADE
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4",
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS leads (
|
"CREATE TABLE IF NOT EXISTS leads (
|
||||||
id VARCHAR(20) PRIMARY KEY,
|
id VARCHAR(20) PRIMARY KEY,
|
||||||
company_id VARCHAR(50) NOT NULL,
|
company_id VARCHAR(50) NOT NULL,
|
||||||
yritys VARCHAR(255),
|
yritys VARCHAR(255),
|
||||||
@@ -150,9 +152,9 @@ function initDatabase(): void {
|
|||||||
muokkaaja VARCHAR(100) DEFAULT '',
|
muokkaaja VARCHAR(100) DEFAULT '',
|
||||||
FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE,
|
FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE,
|
||||||
INDEX idx_company (company_id)
|
INDEX idx_company (company_id)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4",
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS tickets (
|
"CREATE TABLE IF NOT EXISTS tickets (
|
||||||
id VARCHAR(20) PRIMARY KEY,
|
id VARCHAR(20) PRIMARY KEY,
|
||||||
company_id VARCHAR(50) NOT NULL,
|
company_id VARCHAR(50) NOT NULL,
|
||||||
subject VARCHAR(500),
|
subject VARCHAR(500),
|
||||||
@@ -172,9 +174,9 @@ function initDatabase(): void {
|
|||||||
INDEX idx_company (company_id),
|
INDEX idx_company (company_id),
|
||||||
INDEX idx_status (status),
|
INDEX idx_status (status),
|
||||||
INDEX idx_message_id (message_id(255))
|
INDEX idx_message_id (message_id(255))
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4",
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS ticket_messages (
|
"CREATE TABLE IF NOT EXISTS ticket_messages (
|
||||||
id VARCHAR(20) PRIMARY KEY,
|
id VARCHAR(20) PRIMARY KEY,
|
||||||
ticket_id VARCHAR(20) NOT NULL,
|
ticket_id VARCHAR(20) NOT NULL,
|
||||||
type VARCHAR(20) NOT NULL,
|
type VARCHAR(20) NOT NULL,
|
||||||
@@ -185,25 +187,25 @@ function initDatabase(): void {
|
|||||||
message_id VARCHAR(500) DEFAULT '',
|
message_id VARCHAR(500) DEFAULT '',
|
||||||
FOREIGN KEY (ticket_id) REFERENCES tickets(id) ON DELETE CASCADE,
|
FOREIGN KEY (ticket_id) REFERENCES tickets(id) ON DELETE CASCADE,
|
||||||
INDEX idx_ticket (ticket_id)
|
INDEX idx_ticket (ticket_id)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4",
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS ticket_tags (
|
"CREATE TABLE IF NOT EXISTS ticket_tags (
|
||||||
ticket_id VARCHAR(20) NOT NULL,
|
ticket_id VARCHAR(20) NOT NULL,
|
||||||
tag VARCHAR(100) NOT NULL,
|
tag VARCHAR(100) NOT NULL,
|
||||||
PRIMARY KEY (ticket_id, tag),
|
PRIMARY KEY (ticket_id, tag),
|
||||||
FOREIGN KEY (ticket_id) REFERENCES tickets(id) ON DELETE CASCADE
|
FOREIGN KEY (ticket_id) REFERENCES tickets(id) ON DELETE CASCADE
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4",
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS archives (
|
"CREATE TABLE IF NOT EXISTS archives (
|
||||||
id VARCHAR(20) PRIMARY KEY,
|
id VARCHAR(20) PRIMARY KEY,
|
||||||
company_id VARCHAR(50) NOT NULL,
|
company_id VARCHAR(50) NOT NULL,
|
||||||
data JSON NOT NULL,
|
data JSON NOT NULL,
|
||||||
archived_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
archived_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||||
FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE,
|
FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE,
|
||||||
INDEX idx_company (company_id)
|
INDEX idx_company (company_id)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4",
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS changelog (
|
"CREATE TABLE IF NOT EXISTS changelog (
|
||||||
id VARCHAR(20) PRIMARY KEY,
|
id VARCHAR(20) PRIMARY KEY,
|
||||||
company_id VARCHAR(50) NOT NULL,
|
company_id VARCHAR(50) NOT NULL,
|
||||||
timestamp DATETIME NOT NULL,
|
timestamp DATETIME NOT NULL,
|
||||||
@@ -214,9 +216,9 @@ function initDatabase(): void {
|
|||||||
details TEXT,
|
details TEXT,
|
||||||
FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE,
|
FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE,
|
||||||
INDEX idx_company_time (company_id, timestamp)
|
INDEX idx_company_time (company_id, timestamp)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4",
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS mailboxes (
|
"CREATE TABLE IF NOT EXISTS mailboxes (
|
||||||
id VARCHAR(20) PRIMARY KEY,
|
id VARCHAR(20) PRIMARY KEY,
|
||||||
company_id VARCHAR(50) NOT NULL,
|
company_id VARCHAR(50) NOT NULL,
|
||||||
nimi VARCHAR(255),
|
nimi VARCHAR(255),
|
||||||
@@ -230,9 +232,9 @@ function initDatabase(): void {
|
|||||||
aktiivinen BOOLEAN DEFAULT TRUE,
|
aktiivinen BOOLEAN DEFAULT TRUE,
|
||||||
FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE,
|
FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE,
|
||||||
INDEX idx_company (company_id)
|
INDEX idx_company (company_id)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4",
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS ticket_rules (
|
"CREATE TABLE IF NOT EXISTS ticket_rules (
|
||||||
id VARCHAR(20) PRIMARY KEY,
|
id VARCHAR(20) PRIMARY KEY,
|
||||||
company_id VARCHAR(50) NOT NULL,
|
company_id VARCHAR(50) NOT NULL,
|
||||||
name VARCHAR(255),
|
name VARCHAR(255),
|
||||||
@@ -245,9 +247,9 @@ function initDatabase(): void {
|
|||||||
auto_close_days INT DEFAULT 0,
|
auto_close_days INT DEFAULT 0,
|
||||||
FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE,
|
FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE,
|
||||||
INDEX idx_company (company_id)
|
INDEX idx_company (company_id)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4",
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS files (
|
"CREATE TABLE IF NOT EXISTS files (
|
||||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||||
company_id VARCHAR(50) NOT NULL,
|
company_id VARCHAR(50) NOT NULL,
|
||||||
customer_id VARCHAR(20) NOT NULL,
|
customer_id VARCHAR(20) NOT NULL,
|
||||||
@@ -258,8 +260,16 @@ function initDatabase(): void {
|
|||||||
uploaded_by VARCHAR(100),
|
uploaded_by VARCHAR(100),
|
||||||
FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE,
|
FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE,
|
||||||
INDEX idx_company_customer (company_id, customer_id)
|
INDEX idx_company_customer (company_id, customer_id)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4",
|
||||||
");
|
];
|
||||||
|
|
||||||
|
foreach ($tables as $i => $sql) {
|
||||||
|
try {
|
||||||
|
$db->exec($sql);
|
||||||
|
} catch (PDOException $e) {
|
||||||
|
throw new RuntimeException("Taulun luonti epäonnistui (taulu #" . ($i+1) . "): " . $e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ==================== YRITYKSET ====================
|
// ==================== YRITYKSET ====================
|
||||||
|
|||||||
Reference in New Issue
Block a user