新しい列をMYSQLテーブルに追加する方法は?


100

PHPを使用して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>


私のクエリの言い方がわからない、私はこれを持っているので機能しません。if(!$ sql){mysql_query( "ALTER TABLE assessmentADD q6INT(1)NOT NULL AFTER q5"); echo 'Q6 created'; } ELSE {//ここから、通常どおりページを続行します。echo 'Q6は既に存在します!';
スティーブントレイナー2013

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

悪いコード。mysql_queryは、重複したフィールドを追加しようとしているときだけでなく、すべての失敗に対してブールfalseを返します。mysql_error()何が問題かを常に確認してください。例えば$result = mysql_query($sql) or die(mysql_error());
Marc B

この質問はPHPとどのような関係がありますか?
Kolob Canyon

回答:


237

あなたのテーブル:

q1 | q2 | q3 | q4 | q5

あなたもできる

ALTER TABLE yourtable ADD q6 VARCHAR( 255 ) after q5

2
おかげで、それは動作しました-mysql_query( "ALTER TABLE assessmentADD q6INT(1)NOT NULL AFTER q5");
Steven Trainor

テキストボックスに入力する名前に関係なく、列に名前を付けるにはどうすればよいですか?
スティーブントレイナー2013

1
送信後、テキストボックスの値は$ _POST ['newq']にあるはずです
Dima

9
@StevenTrainor:SQLステートメントでは、テキストボックス内の文字列をそのまま使用しないでください。SQLインジェクションの脆弱性を回避するには、必ずエスケープする必要があります。
コスティシウダツ2014

2
それは2015年であり、人々はまだSQLインジェクションの脆弱性のために自分自身を設定しようとしています
CommandZ

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

あなたが望むVARCHAR( 255 ) NOT NULLものに変えることができdatatypeます。


おかげで、テキストボックスに入力する名前をどのように列に付けることができますか?
Steven Trainor 2013

1
@StevenTrainorどういう意味textboxですか?あなたがinput何をtype='text'書くかを意味するならば$column = $_POST['textbox'];
アブドラ・サルマ

@StevenTrainorまず、あなたの入力名前を付ける必要がありますname='textbox'または変更テキストボックスを$column = $_POST['textbox'];...入力の名前に
アブドラサルマ

6
  • テーブルの最後に新しい列を追加できます

    ALTER TABLE assessment ADD q6 VARCHAR( 255 )

  • テーブルの最初に列を追加する

    ALTER TABLE assessment ADD q6 VARCHAR( 255 ) FIRST

  • 指定した列の横に列を追加します

    ALTER TABLE assessment ADD q6 VARCHAR( 255 ) after q5

その他のオプションはこちら


3

何かのようなもの:

$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";
}

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


ありがとう-テキストボックスに入力する名前に関係なく、列に名前を付けるにはどうすればよいですか?
Steven Trainor 2013

私の$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つのテーブルを作成します。

  1. 評価
  2. 質問
  3. Assessment_question(列validationId、questionId)

質問と評価をそれぞれのテーブルに入れ、外部キーを使用したassessment_questionを通じてそれらをリンクします。


0

WORDPRESSの場合:

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"
);}

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.