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 {
|
||||
$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,
|
||||
nimi VARCHAR(255) NOT NULL,
|
||||
luotu DATETIME,
|
||||
@@ -41,17 +43,17 @@ function initDatabase(): void {
|
||||
logo_file VARCHAR(255) DEFAULT '',
|
||||
api_key VARCHAR(64) 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,
|
||||
company_id VARCHAR(50) NOT NULL,
|
||||
domain VARCHAR(255) NOT NULL,
|
||||
FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE,
|
||||
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,
|
||||
username VARCHAR(100) NOT NULL UNIQUE,
|
||||
password_hash VARCHAR(255) NOT NULL,
|
||||
@@ -59,46 +61,46 @@ function initDatabase(): void {
|
||||
role ENUM('admin','user') DEFAULT 'user',
|
||||
email VARCHAR(255) DEFAULT '',
|
||||
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,
|
||||
company_id VARCHAR(50) NOT NULL,
|
||||
PRIMARY KEY (user_id, company_id),
|
||||
FOREIGN KEY (user_id) REFERENCES users(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,
|
||||
user_id VARCHAR(20) NOT NULL,
|
||||
mailbox_id VARCHAR(20) NOT NULL,
|
||||
signature TEXT,
|
||||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
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_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,
|
||||
user_id VARCHAR(20) NOT NULL,
|
||||
token VARCHAR(64) NOT NULL UNIQUE,
|
||||
created_at DATETIME NOT NULL,
|
||||
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,
|
||||
ip VARCHAR(45) NOT NULL,
|
||||
attempted_at DATETIME NOT NULL,
|
||||
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,
|
||||
company_id VARCHAR(50) NOT NULL,
|
||||
yritys VARCHAR(255),
|
||||
@@ -118,9 +120,9 @@ function initDatabase(): void {
|
||||
muokkaaja VARCHAR(100) DEFAULT '',
|
||||
FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE,
|
||||
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,
|
||||
customer_id VARCHAR(20) NOT NULL,
|
||||
asennusosoite VARCHAR(255) DEFAULT '',
|
||||
@@ -131,9 +133,9 @@ function initDatabase(): void {
|
||||
sopimuskausi VARCHAR(100) DEFAULT '',
|
||||
alkupvm VARCHAR(20) DEFAULT '',
|
||||
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,
|
||||
company_id VARCHAR(50) NOT NULL,
|
||||
yritys VARCHAR(255),
|
||||
@@ -150,9 +152,9 @@ function initDatabase(): void {
|
||||
muokkaaja VARCHAR(100) DEFAULT '',
|
||||
FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE,
|
||||
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,
|
||||
company_id VARCHAR(50) NOT NULL,
|
||||
subject VARCHAR(500),
|
||||
@@ -172,9 +174,9 @@ function initDatabase(): void {
|
||||
INDEX idx_company (company_id),
|
||||
INDEX idx_status (status),
|
||||
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,
|
||||
ticket_id VARCHAR(20) NOT NULL,
|
||||
type VARCHAR(20) NOT NULL,
|
||||
@@ -185,25 +187,25 @@ function initDatabase(): void {
|
||||
message_id VARCHAR(500) DEFAULT '',
|
||||
FOREIGN KEY (ticket_id) REFERENCES tickets(id) ON DELETE CASCADE,
|
||||
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,
|
||||
tag VARCHAR(100) NOT NULL,
|
||||
PRIMARY KEY (ticket_id, tag),
|
||||
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,
|
||||
company_id VARCHAR(50) NOT NULL,
|
||||
data JSON NOT NULL,
|
||||
archived_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE,
|
||||
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,
|
||||
company_id VARCHAR(50) NOT NULL,
|
||||
timestamp DATETIME NOT NULL,
|
||||
@@ -214,9 +216,9 @@ function initDatabase(): void {
|
||||
details TEXT,
|
||||
FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE,
|
||||
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,
|
||||
company_id VARCHAR(50) NOT NULL,
|
||||
nimi VARCHAR(255),
|
||||
@@ -230,9 +232,9 @@ function initDatabase(): void {
|
||||
aktiivinen BOOLEAN DEFAULT TRUE,
|
||||
FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE,
|
||||
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,
|
||||
company_id VARCHAR(50) NOT NULL,
|
||||
name VARCHAR(255),
|
||||
@@ -245,9 +247,9 @@ function initDatabase(): void {
|
||||
auto_close_days INT DEFAULT 0,
|
||||
FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE,
|
||||
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,
|
||||
company_id VARCHAR(50) NOT NULL,
|
||||
customer_id VARCHAR(20) NOT NULL,
|
||||
@@ -258,8 +260,16 @@ function initDatabase(): void {
|
||||
uploaded_by VARCHAR(100),
|
||||
FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE,
|
||||
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 ====================
|
||||
|
||||
Reference in New Issue
Block a user