4

私のアプリケーションには、複数のユーザーに適用される一般的なクエリがあります。テーブル構造がユーザー間で異なる場合があります。テーブルに列が存在するユーザーにのみ適用したいクエリがあります。

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_display.php:5の'フィールドリスト'に不明な列'item_type'があります

何か案は?

4

4 に答える 4

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;
}

列が存在するかどうかを確認し、タスクを実行します。

于 2012-05-18T17:35:15.837 に答える
7

SHOWCOLUMNSクエリを使用します。

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

行が返される場合、その列は存在します。

于 2012-05-18T18:45:19.320 に答える
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;
    }
}
于 2012-05-18T17:48:56.463 に答える
0

これがお役に立てば幸いです。PHPMysqlでできること

<?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";
}
?>
于 2012-09-03T04:53:21.723 に答える