繁体   English   中英

PHP:如何从列位置而不是列名中选择MySQL表?

[英]PHP: How do I select from MySQL table by column position rather than by column name?

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

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

我理解不这样做的原因,但我仍然想。

简单方案? 只需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;

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

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

以下三个示例向您展示如何使用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];
}

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

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

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

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

  $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用于此目的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM