簡體   English   中英

用於更改表列名的SQL查詢

[英]SQL query to alter table column names

我在PHP中運行此SQL查詢:

$sql="alter table callplandata change '".$_POST["col_name$y"]."' '".$_POST["col_newname$y"]."' ";

更改列名但在更新之前我想檢查列名是否已經存在,以及是否在末尾添加一個數字,否則只是進行更新

我怎么能用PHP做到這一點?

請拜托,請不要這樣做。 這是一件不安全的事情。 但是,我會這樣說: ALTER TABLE語法值得一看:

ALTER TABLE <table name>
    CHANGE [COLUMN] old_col_name new_col_name column_definition

請注意, column_definition不是可選的。
此外,如果要查看給定的字段名是否已存在:

SHOW COLUMNS FROM <table_name> /* or SHOW COLUMNS IN tbl */

然后,在PHP中,根據您使用的擴展名,您執行以下操作:

$existingFields = array();
foreach ($resultSet as $row)
{
    $existingFields[] = $row['Field'];
}

SHOW COLUMNS還將為您提供有關每個字段類型的信息,如果它是一個鍵,或者即使它是一個auto_increment值詳細信息,如同以前一樣,在mysql網站上

所以把它們放在一起:

$db = new PDO();//connect
$stmt = $db->prepare('SHOW COLUMNS IN callplandata WHERE Field = :field');
$bind = array(
    ':field'    => $_POST['colname_new']
);
$stmt->execute($bind);
if ($row = $stmt->fetch())
    throw new InvalidArgumentException($_POST['colname_new'].' already exists!');
$bind[':field'] = $_POST['colname_old'];
$stmt->closeCursor();//reset cursor, so we can re-use the statement
$stmt->execute($bind);//re-use statement
if (!($row = $stmt->fetch(PDO::FETCH_OBJ))
    throw new InvalidArgumentException($_POST['colname_old'].' does not exist, cannot rename it!');
//very basic column definition construction here, needs more work, though!
$current = '';
$current = $row->Type. ' '.($row->Null == 'NO' ? 'NOT NULL ' : '').
    ($row->Default !== '' ? 'DEFAULT '.$row->Default.' ' : '').$row->Extra;
/**
 * ADD CODE HERE TO SANITIZE THE NEW COLUMN NAME
 * if you want to procede with this madness... I would urge you not to, though!
 */
$pdo->exec(
    'ALTER TABLE callplandata
         CHANGE '.$_POST['colname_old'].' '.$_POST['colname_new'].' './/rename
    $current//add column definition
);

免責聲明:
我在這里發布的代碼純粹是學術性的。 它不應該被使用,它是不安全和不完整的。 請重新考慮您要做的事情。 不惜一切代價避免使用用戶數據來改變服務器存儲/構建數據的方式!

嘗試這個

SELECT * 
FROM information_schema.COLUMNS 
WHERE 
TABLE_SCHEMA = 'db_name' 
AND TABLE_NAME = 'table_name' 
AND COLUMN_NAME = 'column_name'

在PHP中

$result = mysqli_query("SHOW COLUMNS FROM `table` LIKE 'fieldname'");
$exists = (mysqli_num_rows($result))?TRUE:FALSE;

我認為您還需要指定數據類型和默認值。

ALTER TABLE `ca_4_4_14`  CHANGE `active` `is_active` ENUM('Y','N') CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT 'Y' NOT NULL;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM