我正在重写我的 mysql 数据库访问的 php 代码(现在使用类定义)。虽然我有旧代码(使用旧样式函数)工作,但我很难获得正确创建表的代码 - 我认为问题特别与 sql 语句的正确定义有关,请参阅下面的代码。与旧代码相比,新的方面(对我来说)是 sql 表创建命令现在必须包含与设置 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';
}
?>