-1

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として指定できます」で始まる部分...」ですが、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';
}
?>
4

1 に答える 1

0

テーブル行の作成を次のように置き換えることができます:- $sql = "CREATE TABLE ".$dbname.".".$dbtable."".$tablestructure; //まだ正しくない

また、代わりに:- $success = $this->_db->e​​xec($sql);

以下の行を使用してください:- $stmt = $this->_db->prepare($sql); $success = $stmt->execute();

上記の 2 行がないと、$succes 変数の値が 0 になり、テーブルは作成できますが、テーブルの作成に失敗したことがエコーされます。お役に立てれば。

于 2013-09-23T14:31:18.747 に答える