使用PDO创建mysql表失败

时间:2013-09-23 13:45:40

标签: php mysql pdo

我正在重写我的php代码以进行mysql数据库访问(现在使用类定义)。当我使用旧代码(使用旧样式函数)工作时,我很难获得正确创建表的代码 - 我认为问题特别与sql语句的正确定义有关,请参阅下面的代码。与旧代码相比,新方面(对我而言)sql table creation命令现在必须包含与为其设置PDO连接的master_database不同的数据库的名称(在类构造函数中)。

我查看http://dev.mysql.com/doc/refman/5.6/en/create-table.html(我使用的是mysql v5.6) - 以“表名可以指定为db_name.tbl_name to ...”开头的部分,但是我无法正确获取sql语法。如果我是正确的sql语法是错误的,下面的代码中的$ sql应该是正确的语法(使用带有各种变量的构造)?

Thnx提前为您提供帮助。

简化代码:

<?php
define('DB_HOST', '***');   
define('DB_NAME', 'MASTER_DATABASE'); //different name
define('DB_USER', 'root');
define('DB_PASS', '*****');

//class definitions
class Database {

private $_db = null; //databasehandler

public function __construct() {

    try {
        $this->_db = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASS, array( 
            PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true
        ));
        $this->_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $this->_db->query('SET CHARACTER SET utf8');
    } catch (PDOException $e) {
        exit('Error while connecting to database.'.$e->getMessage());
    }
}

private function printErrorMessage($message) {
    echo $message;
}


public function createDBTable($dbname,$dbtable,$tablestructure) {
    try {
        $sql = "CREATE TABLE `".$dbname."'.'".$dbtable.$tablestructure; //NOT CORRECT YET
        $success = $this->_db->exec($sql);
        return ($success > 0) ? true:false;
    }
    catch(PDOException $e){          
        $this->printErrorMessage($e->getMessage());
    }
}
}//class


//code using class defs
$dbname = 'Mydatabase'; //just an existing database
$dbtable = 'Persons';
$tablestructure = '(FirstName CHAR(30),LastName CHAR(30),Age INT)';

$mydb = new Database();

if($mydb->createDBTable($dbname,$dbtable,$tablestructure)){
echo 'table creation  success';
}
else{
echo 'table creation failure';
}
?>

1 个答案:

答案 0 :(得分:0)

您可以将创建表格行替换为: - $ sql =“CREATE TABLE”。$ dbname。“。”。$ dbtable。“”。$ tablestructure; //不正确

也代替: - $ success = $ this-&gt; _db-&gt; exec($ sql);

使用以下行: - $ stmt = $ this-&gt; _db-&gt; prepare($ sql); $ success = $ stmt-&gt; execute();

如果没有上述两行,$ succes变量的值将为0,虽然可以创建表,但它会使表创建失败。 希望这会有所帮助。