2013-04-19 15 views
78

PHPを使用してMYSQLテーブルに新しい列を追加しようとしています。新しい列が作成されるようにテーブルを変更する方法が不明です。私の評価表では、私はMYSQLテーブルに新しい列を追加する方法

assessmentid | q1 | q2 | q3 | q4 | q5 

を持って、私はテキストボックスでページを持っていると私はテキストボックスにしてQ6を入力し、ボタンを押して、テーブルを事前に

assessmentid | q1 | q2 | q3 | q4 | q5 | q6 

おかげに更新されると言う

<?php 
include 'core/init.php'; 
include 'core/admininit.php'; 
include 'includes/overall/overall_header.php'; 
adminprotect_page(); 
include 'includes/adminmenu.php'; 
?>  
<?php 

mysql_query("ALTER TABLE `assessment` ADD newq INT(1) NOT NULL AFTER `q10`"); 

?> 
<h1>Input Career Name</h1> 

    <form method="post" action=""> 

     Career Name 
     <input type="text" name="newq" size="20"> 

    <input type="submit" 
     name="submit" value="Submit"> 

</body> 
</html> 
+3

RTLM:http://dev.mysql.com/doc/refman/5.1/en/alter-table .html –

+0

私の質問をどのように言いたいのかわかりませんが、これがあり、うまくいきません。 $ sql = mysql_query( "SELECT * FROM assessment"); if(!$ sql){ mysql_query( "ALTER TABLE'評価 'ADD' q6' INT(1)NOT NULL AFTER 'q5'"); echo 'Q6 created'; } ELSE { //ここからはいつものようにページを続けてください! エコー 'Q6は既に存在します!'; –

+1

@StevenTrainorコメントは、ソースコードに最適な場所ではありません。あなたがあなたの問題を抱えている場所を示しているなら、それは問題の一部でなければなりません。ソースを含めるように質問を編集できますか? –

答えて

198

あなたのテーブル::

q1 | q2 | q3 | q4 | q5 

また、あなたは、実行時に列を作成しないように、データベースの正規化になるはずです

ALTER TABLE yourtable ADD q6 VARCHAR(255) after q5 
+2

ありがとうございました、それは - mysql_query( "ALTER TABLE' assessment' ADD 'q6' INT(1)NOT NULL AFTER' q5' ")を使って動作しました。 –

+0

どのような名前をテキストボックスに入力すればいいですか? –

+0

単純なHTMLフォームのテキストボックスを意味する場合は、フォームを取得するか、フォームターゲットページのパラメータを取得することでそれを行うことができます – Dima

6
$table = 'your table name'; 
$column = 'q6' 
$add = mysql_query("ALTER TABLE $table ADD $column VARCHAR(255) NOT NULL"); 

あなたは今までdatatypeあなたが望むものにVARCHAR(255) NOT NULLを変更することができます。以下のような

+0

ありがとう、どのように名前を私はテキストボックスに入力する列に名前を付けることができますか? –

+1

@StevenTrainor「テキストボックス」とはどういう意味ですか?もしあなたが 'input 'を意味するなら' type =' text ''' $ column = $ _POST [' textbox ']; ' –

+0

@StevenTrainorを最初に入力するには' name =' textbox''という名前をつけるか、 '$ column = $ _POST ['textbox'];'入力の名前に... –

2

何か:

$db = mysqli_connect("localhost", "user", "password", "database"); 
$name = $db->mysqli_real_escape_string($name); 
$query = 'ALTER TABLE assesment ADD ' . $name . ' TINYINT NOT NULL DEFAULT \'0\''; 
if($db->query($query)) { 
    echo "It worked"; 
} 

はそれをテストしていませんが、動作するはずです。

+0

ありがとう - どのように私はテキストボックスに入力する名前を何列にすることができますか? –

+0

私の '$ name'代入を' $ name = $ db-> mysqli_real_escape_string($ _ GET ['input']);に置き換えてください。それがajaxならもう少し複雑です。 –

0

あなたのコメントに基づいて、mysql_query("SELECT * FROM assessment");がfalseを返す場合は、新しい列を追加するだけのようです。それはおそらくあなたが望むものではありません。 '!'を削除してみてください。最初の 'if'ステートメントの$ sqlの前にあります。

$sql=mysql_query("SELECT * FROM assessment"); 
if ($sql) { 
mysql_query("ALTER TABLE assessment ADD q6 INT(1) NOT NULL AFTER q5"); 
echo 'Q6 created'; 
}else... 
0

を行うことができますので、あなたのコードは次のようになります。

3つの表にしてください:評価

  • 質問
  • assessment_question(列assessmentId、questionId)
  • は、それぞれのテーブルに質問し、評価を入れて使用してassessment_questionを介して一緒にそれらをリンク

    1. を外部キー。

    4
    • あなたがテーブルの最後

      ALTER TABLE assessment ADD q6 VARCHAR(255)

    • に新しい列を追加することができ、テーブルの初め

      ALTER TABLE assessment ADD q6 VARCHAR(255) FIRST

    • に列を追加し、次に列を追加指定された列

      ALTER TABLE assessment ADD q6 VARCHAR(255) after q5

    とより多くのオプションWordPress用here

    0

    global $wpdb; 
    
    
    $your_table = $wpdb->prefix. 'My_Table_Name'; 
    $your_column =    'My_Column_Name'; 
    
    if (!in_array($your_column, $wpdb->get_col("DESC " . $your_table, 0))){ $result= $wpdb->query(
        "ALTER  TABLE $your_table  ADD $your_column  VARCHAR(100)  CHARACTER SET utf8  NOT NULL  " //you can add positioning phraze: "AFTER My_another_column" 
    );} 
    
    関連する問題