【问题标题】:How do I find if a column exists or not using PHP + mysqli database如何使用 PHP + mysqli 数据库查找列是否存在
【发布时间】:2025-12-08 11:40:02
【问题描述】:

如何使用 PHP + mysqli 数据库查找列是否存在。

我一直在尝试这些以及评论部分..但似乎没有任何效果。

$column1="address";
$chkcol="SELECT * FROM `table_name` LIMIT 1";
/*  $chktable="SELECT * FROM information_schema.COLUMNS
    WHERE TABLE_SCHEMA = `db_name` AND TABLE_NAME = `table_name` AND COLUMN_NAME = `$col_name`";*/
    $mycol = mysqli_fetch_array($chkcol); 
/*  echo $val=mysqli_query($conn,$chktable);
    echo $val; */
    if(isset($mycol['$column1']))
        {
            $message="Adress column already exists.";
            echo $message;
        }

    else
        {
            echo "Column doesn't exist";
         }

如果有任何短代码或简单代码可以使其工作。然后告诉我。 这不是 MySQL,而是 MySQLi(Procedural),因为我发现的早期答案是 MySQL (Obj Oriented) 不起作用。

【问题讨论】:

  • 你应该使用空的
  • 查询 information_schema 是正确的方法,不知道你为什么放弃它
  • 您在尝试获取结果之前尚未执行查询
  • 在注释的 information_schema 查询中,您使用的是未定义的变量 $col_name

标签: php mysqli


【解决方案1】:

假设您已经创建了包含所有字段的 DB/Table 并成功建立了与您正在使用的 MySQL 数据库的连接(通过创建 mysqli 对象或程序方式),这可能看起来像这样 -

$connection = new mysqli('HOST_NAME', 'USERNAME', 'PASSWORD', 'DATABASE_NAME');

以这种方式写下您的 SQL 查询并将其存储在您选择的变量中。这边——

$query = 'SHOW COLUMNS FROM table_name';

通过以下方式向数据库发出查询并捕获结果-

$result = $connection->query($query);

然后您可以使用带有 MYSQLI_ASSOC 常量的 fetch_all 函数来检索所有列名。这边——

$values = $result->fetch_all(MYSQLI_ASSOC);
$column_names = array();    // $column_names = [];

if(!empty($values)){
    $column_names = array_keys($values[0]);
}

现在您知道要查找的列名,它存储为

$column1 = "address";

如果您的列存在,您现在可以检查 $column_names 数组 -

if (in_array($coulmn1, $column_names)) {
    echo "Yes! " . $column1 . " is present in the table!";
}

这是一个稍长的解决方案。可能不是您想要的,但希望对您有所帮助。

【讨论】:

  • 不幸的是不适合我。 echo json_encode($column_names) 不是返回我的表的列,而是返回["Field","Type","Null","Key","Default","Extra"]。这些是从 SHOW COLUMNS 命令 (mysqltutorial.org/mysql-show-columns) 生成的列名。我需要Field 列中的所有条目。