如何使用 PHP、PDO、MySQL 检查列是否不存在?

问题描述 投票:0回答:5

在我的应用程序中,我有一个适用于多个用户的通用查询。 在某些情况下,用户之间的表结构可能有所不同。 我有一个查询,只想应用于表中存在该列的用户。

function get_item($user_id) {

    global $dbh;

    $sth = $dbh->query ("SELECT item_type FROM items WHERE user_id = '$user_id'");

    $row = $sth->fetch();

    $item_type = $row['item_type'];

    return $item_type;

}

如果我的表中不存在“item_type”列,我想忽略它,并将 $item_type 变量设置为 NULL。

对于这些用户,我在查询代码行上收到错误:

致命错误:未捕获异常“PDOException”并带有消息 'SQLSTATE[42S22]:未找到列:1054 未知列'item_type' /item_display.php:5 中的“字段列表”

有什么想法吗?

php mysql pdo
5个回答
14
投票

我不知道这是否对你有帮助,但你可以试试这个:

if (count($dbh->query("SHOW COLUMNS FROM `items` LIKE 'item_type'")->fetchAll())) {
    $sth = $dbh->query ("SELECT item_type FROM items WHERE user_id = '$user_id'");
    $row = $sth->fetch();
    $item_type = $row['item_type'];
} else {
    $item_type = null;
}

它检查列是否存在并执行任务。


7
投票

使用 SHOW COLUMNS 查询:

SHOW COLUMNS FROM <table> WHERE Field = '<column>'

如果返回一行,则该列存在。


3
投票

您还可以让 PDO 抛出异常并捕获这些异常以解析 MySQL 错误。

/**
 * Enable PDO exceptions.
 * @see http://php.net/pdo.setattribute.php
 */
$pdoObject->setAttribute ( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

try
{
    $pdoStatement->execute();
}
catch( PDOException $e )
{
    switch( $e->errorInfo[1] )
    {
        case 1062:
            /* A PRIMARY or UNIQUE key is already assigned */
            return false;
        case 1054:
            /* Column not found */
            return false;
        default:
            /* some other PDO-error */
            log_error($e->getMessage(), 'mysql');
            return false;
    }
}

0
投票

希望这会有所帮助。你可以使用 PHP Mysql 做一些事情

<?php

$link = mysql_connect($server, $username,$password);

if(!link))  
{  
    exit('could not connect');  
}

if(!mysql_select_db($database))
{  
    exit('could not select the database');  
}
$sql="SELECT * FROM myrow WHERE mycolumn='".$columname."'";
$result=mysql_query($sql);
if(!$result){
if(mysql_errno($link)==1054){
            //column does not exist
    echo "<br />available";
    }
}
elseif($nr= mysql_num_rows($result)){
    if ($nr > 0){
                    //column exist
        die('<br />name exists');
    }
}
else
{
            //column does not exist
    echo "<br />available";
}
?>

0
投票

试试这个; pdo php7

function isColumnExists($column, $table) {
    try {
        
        if (empty ($table) || empty ($column)) {
            return FALSE;
        }

        $stmt = $this->db->prepare("SHOW COLUMNS FROM $table LIKE :column");
        $stmt->execute(array("column" => $column));
        $row = $stmt->fetchColumn();
        if ($row != FALSE) {
            return TRUE;
        } else {
            return FALSE;
        }

    } catch (PDOException $e) {
        return FALSE;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.