如何将新列添加到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>


我不确定如何措辞我的查询,我有这个,它不起作用。$ sql = mysql_query(“ SELECT * FROM Assessment”); 如果(!$ sql){mysql_query(“ ALTER TABLE assessmentADD q6INT(1)NOT NULL AFTER q5”); 回显“已创建Q6”;} ELSE {// //从这里开始照常继续页面!回显“ Q6已经存在!”;
Steven Trainor

1
@StevenTrainor注释不是获取源代码的最佳位置。如果要显示问题所在,则应将其作为问题的一部分。您可以编辑问题以包括来源吗?
Nick Freeman

错误的代码。mysql_query会在任何失败时返回布尔值false,而不仅仅是在您尝试添加重复字段时。总是检查mysql_error()出什么问题了。例如$result = mysql_query($sql) or die(mysql_error());
Marc B

这个问题与PHP有什么关系?
Kolob峡谷

Answers:


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

无论我在文本框中键入什么名称,如何命名该列?
Steven Trainor

1
提交后,文本框的值应为$ _POST ['newq']
Dima

9
@StevenTrainor:做不是在SQL语句中使用的字符串中的文本框本身。您必须确保对其进行转义以避免SQL注入漏洞。
Costi Ciudatu 2014年

2
在2015年,人们仍在尝试设置自己的SQL注入漏洞—:facepalm:
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

1
@StevenTrainor是什么意思textbox?如果您是写input什么type='text'$column = $_POST['textbox'];
Abdullah Salma

@StevenTrainor首先,您需要命名输入name='textbox'或将文本框更改$column = $_POST['textbox'];为输入的名称...
Abdullah Salma

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

将我的$name作业替换为:$name = $db->mysqli_real_escape_string($_GET['input']);假设您正常提交表格。如果是ajax,则要复杂一些。
Glitch Desire

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. 评估问题(列评估ID,问题ID)

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


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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.