这是我现在拥有的代码:
<?php
// your connection
mysql_connect("localhost","user","password");
mysql_select_db("database");
// convert code
$res = mysql_query("SHOW TABLES");
while ($row = mysql_fetch_array($res))
{
foreach ($row as $key => $table)
{
$fields = mysql_list_fields($table);
$columns = mysql_num_fields($fields);
for ($i = 0; $i < $columns; $i++) {$field_array[] = mysql_field_name($fields, $i);}
if (in_array('customer_id', $field_array))
{
$result = mysql_query("ALTER TABLE " . $table . " MODIFY customer_id INT(11), CHANGE VARCHAR(12)");
}
echo $key . " => " . $table . " CONVERTED<br />";
}
}
?>
该代码将运行,但不会进行任何更改。
对于它查询的每个表,都会得到这样的一行:
0 => $table CONVERTED
也可以在服务器日志中获取此信息:
PHP Notice: Undefined variable: field_array in /home/bruce/public_html/cat/admx/tables.php on line 16
有什么帮助吗?
最佳答案
我发现您的程序存在一些问题:
不必要的内部枚举。
调用mysql_list_fields()时缺少数据库参数。
在将field_array填充为当前处理表的字段之前,将其初始化为空数组。
使用不推荐使用的功能,并且不标识;-(
我做了一些更正:
<?php
$host = "localhost";
$user = "youruser";
$password = "yourpassword";
$dbname = "yourdatabasename";
$link = mysql_connect($host, $user, $password);
if (!$link)
die("Could not connect: ".mysql_error());
$db = mysql_select_db($dbname);
if (!$db)
die ("Can't select database $dbname: ".mysql_error());
$res = mysql_query("SHOW TABLES");
while ($row = mysql_fetch_array($res)) {
$table = $row[0];
$fields = mysql_list_fields($dbname, $table);
$columns = mysql_num_fields($fields);
$field_array = array();
for ($i = 0; $i < $columns; $i++)
$field_array[] = mysql_field_name($fields, $i);
if (in_array("customer_id", $field_array)) {
$sql = "ALTER TABLE " . $table . " MODIFY customer_id INT(11), CHANGE VARCHAR(12)";
$result = mysql_query($sql);
echo "$table - altered<br>\n";
}
else
echo "$table - no changes necessary<br>\n";
}
?>
让我知道它是否更好;-)