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
的要短一些,尽管他的完全正确而且一针见血。
怎么可能 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
的要短一些,尽管他的完全正确而且一针见血。