113

I am trying to add a new column to my MYSQL table using PHP. I am unsure how to alter my table so that the new column is created. In my assessment table I have:

assessmentid | q1 | q2 | q3 | q4 | q5 

Say I have a page with a textbox and I type q6 in to the textbox and press a button then the table is updated to:

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

My code:

<?php 
  mysql_query("ALTER TABLE `assessment` ADD newq INT(1) NOT NULL AFTER `q10`");
?>
  <form method="post" action="">
    <input type="text" name="newq" size="20">
    <input type="submit" name="submit" value="Submit">
4

9 回答 9

255

你的桌子:

q1 | q2 | q3 | q4 | q5

你也可以

ALTER TABLE yourtable ADD q6 VARCHAR( 255 ) after q5
于 2013-04-19T21:28:21.687 回答
10
 $table  = 'your table name';
 $column = 'q6'
 $add = mysql_query("ALTER TABLE $table ADD $column VARCHAR( 255 ) NOT NULL");

你可以改变VARCHAR( 255 ) NOT NULL成任何datatype你想要的。

于 2013-04-19T21:24:51.150 回答
8
  • 您可以在表格末尾添加一个新列

    ALTER TABLE assessment ADD q6 VARCHAR( 255 )

  • 将列添加到表的开头

    ALTER TABLE assessment ADD q6 VARCHAR( 255 ) FIRST

  • 在指定列旁边添加列

    ALTER TABLE assessment ADD q6 VARCHAR( 255 ) after q5

还有更多选项在这里

于 2015-05-06T06:44:33.813 回答
4

就像是:

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

没有测试过,但应该可以。

于 2013-04-19T21:25:19.333 回答
1

根据您的评论,您似乎只在以下情况下添加新列: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...
于 2013-04-19T21:26:29.103 回答
1

您应该考虑规范化数据库以避免在运行时创建列。

制作3张桌子:

  1. 评估
  2. 问题
  3. 评估问题(列评估ID,问题ID)

将问题和评估放在各自的表格中,并使用外键通过assessment_question 将它们链接在一起。

于 2015-01-13T16:16:35.313 回答
1

对于 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"
);}
于 2015-06-26T08:52:23.540 回答
1
ALTER TABLE `stor` ADD `buy_price` INT(20) NOT NULL ;
于 2019-05-11T17:36:59.607 回答
0

PHP 代码中 ALTER TABLE 的问题出在这一行:

mysql_query("ALTER TABLE 评估添加 newq INT(1) NOT NULL AFTER q10");

它应该在 q5 之后,因为您的表样本中没有 q10。因此,它变为 ALTER TABLE 评估 ADD newq INT(1) NOT NULL AFTER q5;

在我自己的 [Skyvia] 表中尝试了相同的逻辑,它应该如下所示。我在 Title 表中的 To 列之后添加了 description 列。

[Skyvia] - https://skyvia.com/query/online-mysql-query-builder的链接

[图像更改表添加列]在此处输入图像描述

于 2022-01-19T19:25:53.650 回答