1

我有一个有多个列的表,列名将来可以更改,而不是我的脚本按名称从列中选择(因为该信息可以更改),有没有办法按列位置选择?

例如,我想选择表格中的第二列...我可以轻松做到吗?

我明白不这样做的原因,但我仍然想这样做。

4

5 回答 5

3

简单的解决方案?只是SELECT * FROM table,使用 $row = 获取mysql_fetch_row()并从中读取$row[1],它将按顺序成为“第二列”的内容(因为它从 0 开始)。

如果您希望它更专业一点并且只选择需要的内容,您可以INFORMATION_SCHEMA使用如下查询获取第二列名称:

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'your database schema' AND TABLE_NAME = 'the wanted table name' AND ORDINAL_POSITION = 2;

但是,如果您真的想以正确的方式做到这一点,那么请知道您将鼻子放在哪里。如果表结构发生了变化,并且您的代码因此需要进行调整,那就这样吧。这就是应该这样做的方式。如果你让它“工作”但依赖潜在的错误信息,它可能会在以后给你带来更大的问题。

于 2013-03-31T04:43:54.773 回答
0

在 PHP 中,您可以使用$res = mysql_fetch_row($query). $res[1]然后您可以通过;获取第二列

于 2013-03-31T04:33:41.300 回答
0

以下三个示例向您展示如何使用 MySQL、MySQLi 和 PDO 打印第 3 列。

MySQL

while ($row = mysql_fetch_array($query)) {
  print $row[2];
}

MySQLi

$sth->execute();
$sth->bind_result($var1, $var2, $var3);
while ($sth->fetch()) {
  print $var3;
}

PDO

$sth->execute();
while ($row = $sth->fetchAll()) {
  print $row[2];
}
于 2013-03-31T04:35:52.220 回答
0

这是一个糟糕的主意,我几乎不想给你一个解决方案,但这是可能的。MySQL 有一个名为的数据库information_schema,用于存储您可以查询的 DDL 数据。你所追求的将是COLUMNS.ORDINAL_POSITION

SELECT COLUMN_NAME FROM information_schema.COLUMNS
WHERE TABLE_NAME = ? AND ORDINAL_POSITION = ?

这将为您提供第 n 列的名称,您可以在后续查询的字段列表中使用它。在单个查询中执行此操作没有意义。

于 2013-03-31T04:37:38.690 回答
0

很多天前我遇到过这样的问题。但我找到了解决方案:

  $conn = new mysqli("localhost", "root", "", "Mybase");
  $result = $conn->query("SELECT * FROM imagesbase");
  $outp = "";
  while($rs = $result->fetch_array(MYSQLI_BOTH)) {`
     $outp .= "Picture: ".$rs[0]." ".$rs["ImgPathName"]."";`
  }
  $conn->close();
  echo "$outp";

此代码可以通过列号或列名更改。MYSQLI_BOTHMYSQLI_NUMMYSQLI_ASSOC用于此。

于 2019-06-02T16:49:55.533 回答