Php 使用PDO创建mysql表失败

Php 使用PDO创建mysql表失败,php,mysql,pdo,Php,Mysql,Pdo,我正在重写mysql数据库访问的php代码(现在使用类定义)。虽然我使用了旧代码(使用旧样式的函数),但我很难找到正确的创建表的代码——我认为问题尤其与sql语句的正确定义有关,请参见下面的代码。与旧代码相比,新的方面(对我来说)是,sql表创建命令现在必须包含与为其设置PDO连接的master_数据库不同的数据库名称(在类构造函数中) 我查看了(我使用的是mysql v5.6)-以“表名可以指定为db_name.tbl_name to…”开头的部分,但我无法正确理解sql语法。如果我是对的,那

我正在重写mysql数据库访问的php代码(现在使用类定义)。虽然我使用了旧代码(使用旧样式的函数),但我很难找到正确的创建表的代码——我认为问题尤其与sql语句的正确定义有关,请参见下面的代码。与旧代码相比,新的方面(对我来说)是,sql表创建命令现在必须包含与为其设置PDO连接的master_数据库不同的数据库名称(在类构造函数中)

我查看了(我使用的是mysql v5.6)-以“表名可以指定为db_name.tbl_name to…”开头的部分,但我无法正确理解sql语法。如果我是对的,那么sql语法是错误的,下面代码中$sql的正确语法应该是什么(使用带有各种变量的结构)

谢谢你的帮助

简化代码:

<?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';
}
?>

您可以将您创建的表格行替换为:- $sql=“创建表“$dbname.”.“$dbtable.”$tablestructure//还不正确

也不是:- $success=$this->\u db->exec($sql)

使用以下行:- $stmt=$this->\u db->prepare($sql); $success=$stmt->execute()

如果没有上述两行,$succes变量的值将为0,尽管可以创建表,但它将回显表创建失败。
希望这能有所帮助。

您是否尝试使用errorInfo获取故障原因?您必须使用反勾号打开和关闭每个虚线组件。您以反勾号打开,但以单引号关闭。使用
createDBTable()
函数有什么意义?打电话的时候省下两个字?请注意,您刚刚将它们移到了函数名中。在我的一生中,我永远都不会明白为什么会有这样的函数,它的实际目的只是将参数连接到
`databasename`.`tablename`
说到问题本身,PDO与SQL语法无关。如果您不能正确理解sql语法,那么为什么不询问sql语法呢?所有这些PDO的东西有什么意义?所有评论都是thnx@马克:你的解决方案有效,我使用了它(不明白为什么它被否决了…),很高兴它有效。这被否决了,因为“您的常识”试图解释这实际上是SQL语法的问题,与PDO无关。