13

私はphpとこのフォーラムに非常に慣れていないので、エラーや間違った質問があればお許しください. 私が提供したコードでは、DB「mydb」にテーブルを作成しようとしています。DBへの接続をテストしました(動作します)。それは私が問題を抱えているテーブルを作成するだけです。アドバイスや批判をいただければ幸いです。どうも

<?php
/*
*
* File:         PDOcreateTabletcompany.php
* By:          Jay
* Date:       24-10-13
*
*  This script createsTableintoDB
*
*====================================
*
*/
try {
    $db = new PDO("mysql:dbname=mydb;host=localhost", "root", "" );
} catch(PDOException $e) {
    echo $e->getMessage();
}
$table= "tcompany";
$columns = "ID INT( 11 ) AUTO_INCREMENT PRIMARY KEY, Prename VARCHAR( 50 ) NOT NULL, Name VARCHAR( 250 ) NOT NULL,
 StreetA VARCHAR( 150 ) NOT NULL, StreetB VARCHAR( 150 ) NOT NULL, StreetC VARCHAR( 150 ) NOT NULL, 
 County VARCHAR( 100 ) NOT NULL, Postcode VARCHAR( 50 ) NOT NULL, Country VARCHAR( 50 ) NOT NULL " ;


$createTable = $db->exec("CREATE TABLE IF NOT EXISTS mydb.$table ($columns)");

if ($createTable) 
{
    echo "Table $table - Created!<br /><br />";
}
else { echo "Table $table not successfully created! <br /><br />";
}
?>
4

1 に答える 1

49

テーブルの作成時に影響を受ける行がないため、 $createTable は 0 を返しますマニュアルを参照してください

PDO::exec() は、発行した SQL ステートメントによって変更または削除された行数を返します。影響を受けた行がない場合、PDO::exec() は 0 を返します。

テーブルを作成しているとき、列名がハードコードされている場合 (以下のコードのように)、SQL インジェクションから解放されます。$table = "tcompany";あなたが作成したテーブルを印刷したいので、私は残しました(私はそれを自分で省略します)

ブロック内のエラーを表示するエラー処理を追加しました。try

$table = "tcompany";
try {
     $db = new PDO("mysql:dbname=mydb;host=localhost", "root", "" );
     $db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );//Error Handling
     $sql ="CREATE table $table(
     ID INT( 11 ) AUTO_INCREMENT PRIMARY KEY,
     Prename VARCHAR( 50 ) NOT NULL, 
     Name VARCHAR( 250 ) NOT NULL,
     StreetA VARCHAR( 150 ) NOT NULL, 
     StreetB VARCHAR( 150 ) NOT NULL, 
     StreetC VARCHAR( 150 ) NOT NULL, 
     County VARCHAR( 100 ) NOT NULL,
     Postcode VARCHAR( 50 ) NOT NULL,
     Country VARCHAR( 50 ) NOT NULL);" ;
     $db->exec($sql);
     print("Created $table Table.\n");

} catch(PDOException $e) {
    echo $e->getMessage();//Remove or change message in production code
}

コメントの使用に対する注意

CREATE TABLE IF NOT EXISTS
于 2013-10-25T18:14:56.693 に答える