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 框架的一部分):

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 回答