How to add new column to MYSQL table?

PhpMysqlAddAlter

Php Problem Overview


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">

Php Solutions


Solution 1 - Php

your table:

q1 | q2 | q3 | q4 | q5

you can also do

ALTER TABLE yourtable ADD q6 VARCHAR( 255 ) after q5

Solution 2 - Php

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

you can change VARCHAR( 255 ) NOT NULL into what ever datatype you want.

Solution 3 - Php

  • You can add a new column at the end of your table

    ALTER TABLE assessment ADD q6 VARCHAR( 255 )

  • Add column to the begining of table

    ALTER TABLE assessment ADD q6 VARCHAR( 255 ) FIRST

  • Add column next to a specified column

    ALTER TABLE assessment ADD q6 VARCHAR( 255 ) after q5

and more options here

Solution 4 - Php

Something like:

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

Haven't tested it but should work.

Solution 5 - Php

You should look into normalizing your database to avoid creating columns at runtime.

Make 3 tables:

  1. assessment
  2. question
  3. assessment_question (columns assessmentId, questionId)

Put questions and assessments in their respective tables and link them together through assessment_question using foreign keys.

Solution 6 - Php

Based on your comment it looks like your'e only adding the new column if: mysql_query("SELECT * FROM assessment"); returns false. That's probably not what you wanted. Try removing the '!' on front of $sql in the first 'if' statement. So your code will look like:

$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...

Solution 7 - Php

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

Solution 8 - Php

ALTER TABLE `stor` ADD `buy_price` INT(20) NOT NULL ;

Solution 9 - Php

The problem with the ALTER TABLE in the PHP code is in this line:

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

It should be AFTER q5 since there is no q10 in your table sample. So, it becomes ALTER TABLE assessment ADD newq INT(1) NOT NULL AFTER q5;

Tried the same logic in my own table in [Skyvia] and it should work as seen below. I added the description column after the To column in the Title table.

[Skyvia] - the link to https://skyvia.com/query/online-mysql-query-builder

[image alter-table-add-column]enter image description here

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSteven TrainorView Question on Stackoverflow
Solution 1 - PhpDimaView Answer on Stackoverflow
Solution 2 - PhpAbdullah SalmaView Answer on Stackoverflow
Solution 3 - PhpamarnathView Answer on Stackoverflow
Solution 4 - PhpGlitch DesireView Answer on Stackoverflow
Solution 5 - PhpErik van VelzenView Answer on Stackoverflow
Solution 6 - PhpRyan EppView Answer on Stackoverflow
Solution 7 - PhpT.ToduaView Answer on Stackoverflow
Solution 8 - PhpShinwar ismailView Answer on Stackoverflow
Solution 9 - PhpHassan MunirView Answer on Stackoverflow