Как добавить новый столбец в таблицу MYSQL?

103

Я пытаюсь добавить новый столбец в свою таблицу MYSQL с помощью PHP. Я не знаю, как изменить мою таблицу, чтобы создать новый столбец. В моей оценочной таблице есть:

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 ("ВЫБРАТЬ * ИЗ оценки"); если (! $ sql) {mysql_query ("ALTER TABLE assessmentADD q6INT (1) NOT NULL AFTER q5"); echo 'Q6 created'; } ELSE {// отсюда просто продолжаем страницу как обычно! echo 'Q6 уже существует!';
Стивен Трейнор
1
Комментарии @StevenTrainor - не лучшее место для исходного кода. Если вы показываете, где у вас возникла проблема, это должно быть частью вопроса. Не могли бы вы отредактировать свой вопрос, включив в него источник?
Ник Фриман,
плохой код. mysql_query вернет логическое значение false при ЛЮБОМ сбое, а не только тогда, когда вы пытаетесь добавить повторяющееся поле. всегда проверяйте, mysql_error()что пошло не так. напр $result = mysql_query($sql) or die(mysql_error());.
Marc B
Какое отношение этот вопрос имеет к PHP?
Каньон Колоб

Ответы:

243

ваша таблица:

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");
Стивен Трейнор,
Как я могу назвать столбец любым именем, которое я ввожу в текстовое поле?
Стивен Трейнор,
1
после отправки значение текстового поля должно быть в $ _POST ['newq']
Дима
10
@StevenTrainor: не используйте строку в текстовом поле как таковую в операторе SQL. Вы должны убедиться, что вы избежали этого, чтобы избежать уязвимости SQL-инъекции.
Costi Ciudatu 01
2
2015 год, и люди все еще пытаются настроить себя на уязвимости SQL-инъекций -: facepalm:
CommandZ 08
8
 $table  = 'your table name';
 $column = 'q6'
 $add = mysql_query("ALTER TABLE $table ADD $column VARCHAR( 255 ) NOT NULL");

вы можете превратиться VARCHAR( 255 ) NOT NULLво все, datatypeчто захотите.

Абдулла Салма
источник
Понятно, спасибо, как я могу назвать столбец любым именем, которое я ввожу в текстовое поле?
Стивен Трейнор,
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

и другие варианты здесь

Amarnath
источник
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";
}

Не тестировал, но должен работать.

Глитч-желание
источник
Спасибо - Как я могу назвать столбец любым именем, которое я ввожу в текстовое поле?
Стивен Трейнор,
Замените мое $nameзадание на: $name = $db->mysqli_real_escape_string($_GET['input']);при условии, что вы отправляете форму в обычном режиме. Если это ajax, это немного сложнее.
Glitch Desire
0

Основываясь на вашем комментарии, похоже, что вы добавляете новый столбец только в том случае, если: mysql_query("SELECT * FROM assessment");возвращает false. Вероятно, это не то, что вы хотели. Попробуйте удалить "!" перед $ sql в первом операторе if. Итак, ваш код будет выглядеть так:

$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. оценка_question (столбцы ratingId, 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"
);}
Т. Тодуа
источник
0
ALTER TABLE `stor` ADD `buy_price` INT(20) NOT NULL ;
Шинвар Исмаил
источник