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>


Im अनिश्चित है कि मेरी क्वेरी को कैसे शब्द दें, मेरे पास यह है और यह काम नहीं करता है .. $ sql = mysql_query ("मूल्यांकन से * चयन करें"); अगर ($ एसक्यूएल!) {mysql_query ( "ALTER तालिका assessmentजोड़ें q6INT (1) नहीं NULL के बाद q5"); गूंज 'Q6 निर्मित'; } ELSE {// यहां से पृष्ठ को हमेशा की तरह जारी रखें! गूंज 'Q6 पहले से मौजूद है!'
स्टीवन ट्रेनर

1
स्रोत कोड के लिए @StevenTrainor टिप्पणियाँ सबसे अच्छी जगह नहीं हैं। यदि आप दिखा रहे हैं कि आपको अपनी समस्या कहाँ है तो यह प्रश्न का एक हिस्सा होना चाहिए। क्या आप स्रोत को शामिल करने के लिए अपने प्रश्न को संपादित कर सकते हैं?
निक फ्रीमैन

बुरा कोड। mysql_query किसी भी विफलता पर बूलियन को गलत लौटाएगा, न कि केवल तब जब आप एक डुप्लिकेट फ़ील्ड जोड़ने का प्रयास कर रहे हैं। हमेशा mysql_error()देखें कि क्या गलत हुआ। उदा $result = mysql_query($sql) or die(mysql_error());
मार्क बी

इस सवाल का PHP के साथ क्या करना है?
कोलब कैन्यन

जवाबों:


237

आपकी टेबल:

q1 | q2 | q3 | q4 | q5

आप भी कर सकते हैं

ALTER TABLE yourtable ADD q6 VARCHAR( 255 ) after q5

2
धन्यवाद, यह के साथ काम किया - mysql_query ( "ALTER तालिका assessmentजोड़ें q6INT (1) नहीं NULL के बाद q5");
स्टीवन ट्रेनर

मैं एक टेक्स्टबॉक्स में जो भी नाम टाइप करता हूं उसे कॉलम कैसे नाम दे सकता हूं?
स्टीवन ट्रेनर

1
पाठ बॉक्स का मूल्य आपके द्वारा सबमिट किए जाने के बाद $ _POST ['newq'] में होना चाहिए
Dima

9
@StevenTrainor: एसक्यूएल स्टेटमेंट में अपने टेक्स्ट बॉक्स में स्ट्रिंग का उपयोग करें। SQL इंजेक्शन भेद्यता से बचने के लिए आपको यह सुनिश्चित करना चाहिए कि आप इससे बच सकें।
कोस्टी सियादुतु

2
यह 2015 है और लोग अभी भी खुद को एसक्यूएल इंजेक्शन कमजोरियों के लिए स्थापित करने की कोशिश कर रहे हैं
फेसपॉलम

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

और अधिक विकल्प यहाँ


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']);मान लें कि आप अपना फॉर्म सामान्य रूप से सबमिट करते हैं। अगर यह अजाक्स है तो यह थोड़ा अधिक जटिल है।
ग्लिच डिज़ायर

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. आकलन_संकट (कॉलम मूल्यांकन Id, questionId)

उनकी संबंधित तालिकाओं में प्रश्न और आकलन रखें और विदेशी कुंजियों का उपयोग करके आकलन_संकल्प के माध्यम से उन्हें एक साथ लिंक करें।


0

स्रोत के लिए:

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.