mysql 'WHERE' 条件中的列号

Column number in mysql 'WHERE' condition

怎么可能 select 第一列在 Where clause 中。我正在尝试创建一个 php 函数来根据 id 检索 table 数据,但是由于 id 列的标题在各种 table 中是不同的s,我需要引用 Where 子句中的第一列,因为第一列始终是 id 列。

场景将类似于以下内容,但它会抛出错误并表示 SQL 语法中存在错误。

$stmt = $this->conn->prepare("SELECT * FROM $table WHERE column(1) = :id");

提前致谢。

我认为没有内置的方法可以做到这一点。但是您可以查询 INFORMATION_SCHEMA.COLUMNS 以获取列名。

$col_stmt = $this->conn->prepare("
    SELECT column_name 
    FROM information_schema.columns 
    WHERE table_schema = DATABASE() 
        AND ordinal_position = 1 
        AND table_name = :table");
$col_stmt->execute([':table' => $table]);
$first_col = $col_stmt->fetchColumn();
$stmt = $this->conn->prepare("SELECT * FROM `$table` WHERE `$first_col` = :id");

由于没有内置的方法来执行此操作,我想出了以下代码块来获取第一列,然后在我的 SELECT 语句中使用它。

$stmt = $this->conn->query("SHOW columns FROM $table");
        return $stmt->fetch(PDO::FETCH_LAZY)[0];

我认为这个策略比 Barmar 的要短一些,尽管他的完全正确而且一针见血。