【问题标题】:Check if column exist in MySQL table via PHP通过PHP检查MySQL表中是否存在列
【发布时间】:2014-06-24 04:12:31
【问题描述】:

我创建了 mysql 表,并在其中放置了一些列。

现在我想通过php检查数据库中是否存在某个列。

像这样:

if (column exist){
echo "Column in table is available."
}
else{
echo "Column doesnt exist.";
}

可以这样做吗?

非常感谢您的宝贵时间:)

【问题讨论】:

标签: php mysql


【解决方案1】:

试试

$result = mysql_query("SHOW COLUMNS FROM `table` LIKE 'fieldname'");
$exists = (mysql_num_rows($result))?TRUE:FALSE;
if($exists) {
   // do your stuff
}

更多信息:- MySQL, Check if a column exists in a table with SQL

注意:- mysql_* 不推荐使用mysqliPDO

【讨论】:

  • mysql_* 已弃用
  • 谢谢@Daan 我正在更新我的答案
  • @Daan 您应该向 OP 指出这一点,因为 OP 在mysql 中标记了这个问题。
  • 没关系。只是指出所有其他答案也使用mysql。你不能在问题得到的每一个回答上都指出这一点。这最好在问题的 cmets 部分完成。
【解决方案2】:

您可以使用 mysql_list_fields 和 mysql_num_fields 来获取表的列

$fields = mysql_list_fields('database_name', 'table_name');
$columns = mysql_num_fields($fields);

【讨论】:

  • 看起来这些方法在当前 PHP 版本中已被贬低
【解决方案3】:

在 PHP 中:

$fields = mysql_list_fields('database_name', 'table_name');
$columns = mysql_num_fields($fields);
for ($i = 0; $i < $columns; $i++) {$field_array[] = mysql_field_name($fields, $i);}

if (!in_array('price', $field_array))
{
$result = mysql_query('ALTER TABLE table_name ADD price VARCHAR(10)');
}

这也应该对您有所帮助:

IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = ‘TEST’ AND COLUMN_NAME = ‘TEST_DATE’)
BEGIN
  ALTER TABLE TEST ADD TEST_DATE DATETIME
END

或者你可以这样做:

Show columns from table like 'string';

看看这个问题:How can I check if mysql table column even exists?

【讨论】:

  • 检查列是否存在通常不应该包含ALTER TABLE
【解决方案4】:
If your database is MySQL then, you can use mysql_field_name() and mysql_fetch_field() function in php.

$res = mysql_query('select * from customer', $link);

echo mysql_field_name($res, 0); // print cust_id
echo mysql_field_name($res, 1); // print cust_name 
echo mysql_field_name($res, 2); // print cust_age

【讨论】:

    【解决方案5】:

    在 php 中运行此查询并检查行数是否 > 0 :- DESC 表名'%columns_name%'

    【讨论】:

    • 请在您的答案中添加一些解释,以便其他人可以从中学习
    【解决方案6】:

    好的,我在这个问题上花了 5 个小时查看 StackOverflow 的每个(有时非常复杂)答案,但从未找到有效的答案,而且答案简单得令人沮丧,你会踢自己(就像我一样):

    php 7

    $mysqli = new mysqli($mysql_url, $mysql_user, $mysql_password, $db_name);
    
    $column_name = "my_column";
    $table_name = "my_table";
    
    if ($mysqli->query("SELECT $column_name FROM $table_name")){
            //my_column exists in my_table
        }
    else{
            //my_column doesn't exist in my_table
    }
    

    数据库 101....

    【讨论】:

      【解决方案7】:

      假设您要查找至少下了一个销售订单的客户,您可以使用 EXISTS 运算符,如下所示:

      SELECT customerNumber,
               customerName
      FROM customers
      WHERE EXISTS
          (SELECT 1
          FROM orders
          WHERE orders.customernumber = customers.customernumber);
      

      对于customers 表中的每一行,查询都会检查orders 表中的customerNumber。

      如果出现在customers 表中的customerNumber 存在于orders 表中,则子查询返回第一个匹配行。结果,EXISTS 运算符返回 true 并停止扫描订单表。否则,子查询不返回任何行且 EXISTS 运算符返回 false。

      要获取没有下过任何销售订单的客户,请使用 NOT EXISTS 运算符,如下语句:

      SELECT customerNumber,
               customerName
      FROM customers
      WHERE NOT EXISTS
          (SELECT 1
          FROM orders
          WHERE orders.customernumber = customers.customernumber);
      

      【讨论】:

        【解决方案8】:

        这很简单,但对我有用:

        1) 从你想要的表格中选择所有。

        $qry = "SELECT * FROM table";
        

        2) 带上结果,验证字段是否存在。

        if( $result = $mysqli->query($qry)  &&  isset($result['field_you_want']) ){
            //Exists
        }else{
            //Doesn't exists
        }
        

        【讨论】:

        • 这给出了错误“不能使用 mysqli_result 类型的对象作为数组”。您需要对其使用 fetch 方法或类似的方法。此外,如果有大量数据,您可以在查询中添加 LIMIT 1。
        【解决方案9】:

        创建一个函数

        function CheckIfColumnExist($string) {
        global $sqlConnect;
        if (empty($string)) {
            return false;
        }
        $query = mysqli_query($sqlConnect, "SELECT $string FROM `table_name`");
        if (mysqli_num_rows($query) > 0)
        {
        $fetched_data = mysqli_fetch_assoc($query);
        return true;
        }
        }
        

        在 PHP 中

        $string = $_POST['string'];
        if(CheckIfColumnExist($string) == false){
        echo "column doesn't exist!."; 
        }else{
        echo "column is existing!.";
        }
        

        【讨论】:

        • 请在您的答案中添加一些解释,以便其他人可以从中学习
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-21
        • 2011-01-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多