6

テーブルからauto_increment列名を取得するにはどうすればよいですか(最後の挿入IDではありません)

例えば:

create table members (member_id int auto_increment, name char(50), primary key(member_id));

member_idテーブルメンバーからを取得するにはどうすればよいですか。

私はphpクラスを作成しており、次のように取得できるメソッドを追加します。

$members->findById(123);

自動インクリメント列を見つけて、それに基づいてクエリを作成し、クエリを実行することを知っている必要があります。

4

4 に答える 4

9

あなたはで列を得ることができます

show columns from members where extra like '%auto_increment%'

最初の列Fieldはauto_increment列名です。

$sql = "show columns from members where extra like '%auto_increment%'";
$sth = $dbh->prepare($sql) or die($dbh->error());
$sth->execute() or die($dbh->error());
$row = $sth->fetch();
$column = $row['Field'];
于 2013-03-15T22:11:30.787 に答える
1
SELECT  column_name 
FROM    INFORMATION_SCHEMA.COLUMNS 
WHERE    table_name = "members" 
AND     extra = "auto_increment";

これを試して!

于 2013-03-15T22:14:24.000 に答える
1

Zend Frameworkで作業したときに、このタイプの関数をZend_Dbコンポーネントの一部として実装しました。INFORMATION_SCHEMAへのアクセスが遅すぎることがわかったため、代わりにDESCRIBEを使用する必要がありました。

次のようなものです(ただし、これは私がテストしたばかりの簡略化されたコードであり、Zend Frameworkの一部ではありません):

function getAutoIncColumn($table)
{
    global $dbh;

    $stmt = $dbh->query("DESCRIBE `$table`");
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
      if (strstr($row["Extra"], "auto_increment")) {
        return $row["Field"];
      }
    }
    return null;
}
于 2013-03-15T22:17:07.107 に答える
0

information_schemaに基づいてステートメントを動的に準備してから、実行する必要があります。

PREPARE stmt FROM concat(
 'select * from members where ', 
 (select COLUMN_NAME 
  from INFORMATION_SCHEMA.COLUMNS 
  where table_name='members' and EXTRA like '%auto_increment%'),
  '=?'
 );
EXECUTE stmt;
于 2013-03-15T22:13:48.983 に答える