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 evaluation"); if (! $ sql) {mysql_query ( "ALTER TABLE assessmentADD q6INT (1) NOT NULL AFTER q5"); echo 'Q6 생성됨'; } ELSE {// 여기에서 평소처럼 페이지를 계속합니다! echo 'Q6이 이미 존재합니다!';
Steven Trainor

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

텍스트 상자에 입력하는 이름으로 열 이름을 어떻게 지정할 수 있습니까?
Steven Trainor

1
제출 후 텍스트 상자의 값은 $ _POST [ 'newq']에 있어야합니다.
Dima

9
@StevenTrainor : 할 일이 없는 SQL 문에 같은 텍스트 상자에 문자열을 사용합니다. SQL 주입 취약점을 피하기 위해 반드시 이스케이프해야합니다.
Costi Ciudatu

2
그것은 2015 년의 사람들은 여전히 SQL 주입 vulnerabilities-을 위해 자신을 설정하려고 : 마른 세수 :
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'];
압둘라 셀마

@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

$name과제를 다음으로 바꿉니다 $name = $db->mysqli_real_escape_string($_GET['input']);. 양식을 정상적으로 제출한다고 가정합니다. 아약스라면 좀 더 복잡합니다.
Glitch Desire

0

귀하의 의견에 따르면 다음과 같은 경우에만 새 열을 추가하는 것처럼 보입니다 mysql_query("SELECT * FROM assessment");. 그것은 아마도 당신이 원하는 것이 아닐 것입니다. '!'를 제거해보십시오. 첫 번째 '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 (평가 ID, 질문 ID 열)

질문과 평가를 각각의 테이블에 넣고 외래 키를 사용하여 evaluation_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.