如何从表(不是最后一个插入ID)中获取auto_increment列名?
例如:
create table members (member_id int auto_increment, name char(50), primary key(member_id));
如何从表格成员中获取member_id
。
我正在制作一个php类,我将添加一个允许你这样做的方法:
$members->findById(123);
它应该知道找到自动增量列并基于该查询构建查询然后执行查询。
答案 0 :(得分:8)
您可以使用
获取该列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'];
答案 1 :(得分:1)
SELECT column_name
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = "members"
AND extra = "auto_increment";
试试这个!
答案 2 :(得分: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;
}
答案 3 :(得分: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;