2015-09-25 109 views
0
<?php 
require_once 'dbconfig.php'; 

try{ 
    $dsn = "mysql:host=$host;dbname=$dbname"; // $dbname is empdb as in dbconfig.php 
    $dbh = new PDO($dsn, $username, $password); 

$sql_create_dept_tbl = <<<EOSQL 
CREATE TABLE departments(
department_no int(11) NOT NULL AUTO_INCREMENT, 
name varchar(255) DEFAULT NULL, 
PRIMARY KEY (department_no) 
) ENGINE=InnoDB 
EOSQL; 

$sql_create_emp_tbl = <<<EOSQL 
CREATE TABLE employees (
employee_no int(11) NOT NULL AUTO_INCREMENT, 
first_name varchar(40) NOT NULL, 
last_name varchar(40) NOT NULL, 
department_no int(11) DEFAULT NULL, 
PRIMARY KEY (employee_no), 
KEY emp_dept (department_no), 
CONSTRAINT emp_dept FOREIGN KEY (department_no) 
REFERENCES departments (department_no) 
) ENGINE=InnoDB 
EOSQL; 

$msg = ''; 

$r = $dbh->exec($sql_create_dept_tbl); 

if($r !== false){ 
    $r = $dbh->exec($sql_create_emp_tbl); 

if($r !== false){ 
    $msg = "Tables are created successfully!<br/>"; 
}else{ 
    $msg = "Error creating the employees table.<br/>"; 
} 

}else{ 
    $msg = "Error creating the departments table.<br/>"; 
} 

// display the message 
if($msg != '') 
    echo $msg; 
}catch (PDOException $e){ 
    echo $e->getMessage(); 
} 

我已經經歷了所有的初始化了還是我得到的是錯誤表創建到PDO

「錯誤創建部門表」。

但我看到一個已經在數據庫(empdb)中創建的「departments」表。 爲什麼當表已被創建時,我得到一個錯誤消息? 。我正在使用WAMP服務器和phpMyadmin來訪問數據庫。 任何有關這方面的幫助對我來說都是最有價值的。

回答

2

添加CREATE TABLE [IF NOT EXISTS]到您的表定義:

CREATE TABLE IF NOT EXISTS departments(
department_no int(11) NOT NULL AUTO_INCREMENT, 
name varchar(255) DEFAULT NULL, 
PRIMARY KEY (department_no) 
) ENGINE=InnoDB 

和:

CREATE TABLE IF NOT EXISTS employees 
... 
1

你得到錯誤,因爲已經創建了表並不能老是再次創建,所以:

$r = $dbh->exec($sql_create_dept_tbl) // result is false 

所以下面的代碼塊打印

}else{ 
$msg = "Error creating the departments table.<br/>"; 
} 

您可以檢查是否表已經存在並運行創造或跳過它:

$result = $pdo->query("SELECT 1 FROM $table_name LIMIT 1"); 
if($result){ 
    //// skip table creation 
} else { 
    //// run table creation script 
    $r = false; 
} 
1

不能創建同名不止一次的表。檢查表格是否已經存在總是一個好習慣。使用它它將幫助你,

CREATE TABLE [IF NOT EXISTS] table name