这是我现在拥有的代码:

 <?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 . " =&gt; " . $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";
    }
?>


让我知道它是否更好;-)

07-24 19:18
查看更多