PHP を使用して、MySQL テーブルの列の名前を変更する必要があります。
構文が であるため、これは難しくなりますALTER TABLE [table] CHANGE COLUMN [oldname] [newname] [definition]
。定義は必須パラメーターです。
定義を取得して、これを単純に SQL ステートメントにフィードバックする方法はありますか? いくつかのサンプル コードは素晴らしいでしょう、ありがとう!
PHP を使用して、MySQL テーブルの列の名前を変更する必要があります。
構文が であるため、これは難しくなりますALTER TABLE [table] CHANGE COLUMN [oldname] [newname] [definition]
。定義は必須パラメーターです。
定義を取得して、これを単純に SQL ステートメントにフィードバックする方法はありますか? いくつかのサンプル コードは素晴らしいでしょう、ありがとう!
http://codingforums.com/showthread.php?t=148936によると、結果を解析しSHOW CREATE TABLE
て現在の定義を取得し、それをALTER
ステートメントで使用する必要がある場合があります。
mysql_fetch_field()も役立つ場合があります。
私の解決策はこれでした:
$table = "tableName";
$createTableSQL = $dbh->Execute('SHOW CREATE TABLE ' . $table);
$createTableSQL = $createTableSQL[0][1];
$mappingTable = "originalToDevMapping";
//get mapping
$sql = "SELECT origField, newField
FROM " . $mappingTable;
$newColumns = $dbh->Execute($sql);
foreach ($newColumns as $newColumn) {
if (strlen($newColumn['newField'])<1) {
echo "***Removing*** " . $newColumn['origField'] . "<br><br>";
$sql = "ALTER TABLE " . $table . " DROP COLUMN " . $newColumn['origField'];
$dbh->Execute($sql);
if (strlen($dbh->errorStr)>1) {
echo "<br>************************<br>";
echo "<br>ERROR:<br>";
echo $dbh->errorStr;
echo "<br>************************<br>";
}
} else {
echo "Renaming " . $newColumn['origField'] . " to " . $newColumn['newField'] . "<br><br>";
$sql = "ALTER TABLE " . $table . " CHANGE COLUMN " . $newColumn['origField'] . " " . $newColumn['newField'];
$fieldPos = strpos($createTableSQL,$newColumn['origField']);
$definitionStart = $fieldPos + strlen($newColumn['origField']) + 2;
$definitionEnd = strpos($createTableSQL,',',$definitionStart) - 1;
$definition = substr($createTableSQL,$definitionStart,$definitionEnd-$definitionStart+1);
//workaround - if enum type, comma is included.
if (strstr($definition,'enum')) {
//look for comma after enum end bracket.
$commaPos = strpos($createTableSQL, ',', strpos($createTableSQL,')',$definitionStart));
$definition = substr($createTableSQL,$definitionStart,$commaPos-$definitionStart);
}
$dbh->Execute($sql . " " . $definition);
if (strlen($dbh->errorStr)>1) {
echo "<br>************************<br>";
echo "ERROR:<br>";
echo $dbh->errorStr;
echo "<br>************************<br>";
}
}
}
information_schema
。
SHOW TABLE STATUS [{FROM | IN} db_name] [LIKE 'pattern' | WHERE expr]
を発行SHOW CREATE TABLE
し、対象の列を説明する行を読み上げ、列の定義を特定し、ALTER TABLE
ステートメントを作成します。