Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:如何从MySQL表中按列位置而不是按列名进行选择?_Php_Mysql_Select - Fatal编程技术网

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

PHP:如何从MySQL表中按列位置而不是按列名进行选择?,php,mysql,select,Php,Mysql,Select,我有一个表,它有多个列,列名将来可以更改,而不是我的脚本按列名称从列中选择(因为该信息可以更改),是否有方法按列位置选择 例如,我想选择表中的第二列。。。我能很容易做到吗 我理解不这样做的原因,但我仍然想这样做。在PHP中,您可以使用$res=mysql\u fetch\u row($query)执行查询。然后您可以通过$res[1]获取第二列 以下三个示例演示如何使用MySQL、MySQLi和PDO打印第三列 MySQL MySQLi PDO 这是一个糟糕的想法,我几乎不想给你一个解决方案,但

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

例如,我想选择表中的第二列。。。我能很容易做到吗


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

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

以下三个示例演示如何使用MySQL、MySQLi和PDO打印第三列

MySQL MySQLi PDO
这是一个糟糕的想法,我几乎不想给你一个解决方案,但这是可能的。MySQL有一个名为
information\u schema
的数据库,它存储您可以查询的DDL数据。你要找的是
列。顺序位置

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

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

简单的解决方案?只要
从表中选择*
,用$row=
mysql_fetch_row()
获取并从
$row[1]
读取,它将是顺序排列的“第二列”的内容(从0开始)

如果您希望它更专业一点,并且只选择需要的内容,您可以使用如下查询从
信息\u架构中获取第二个列名:

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

但是如果你真的想用正确的方法做这件事,那就知道你把鼻子放在哪里了。如果表结构发生了变化,您的代码也因此需要修改,那就这样吧。应该这样做。如果你让它“工作”,但依赖于潜在的错误信息,以后可能会给你带来更大的问题。

我几天前就遇到过这样的问题。但我找到了解决办法:

$conn=newmysqli(“localhost”、“root”、“Mybase”);
$result=$conn->query(“从imagesbase中选择*);
$outp=“”;
而($rs=$result->fetch_数组(MYSQLI_两者)){`
$outp.=“图片:”$rs[0]。$rs[“ImgPathName”]。”`
}
$conn->close();
回显“$outp”;

此代码可以通过列号或列名进行更改<代码>MYSQLI_两者
MYSQLI_NUM
MYSQLI_ASSOC
用于此操作。

是否使用PDO<代码>mysql*?MySQLi?您希望在哪里执行此操作,在SQL查询中还是在php中?您当然可以查询所有列,然后在php中获取第二列。您可以使用查找表,而不是使用列号<代码>数组('name'=>0,'password'=>1)。然后你可以做
$row[$lookup['name'];
。也许这不是更好,但你仍然可以看到你想要得到什么。我想他想根据表定义从列位置选择,而不是我看到的查询字段列表。谢谢你提供的信息。我真的认为有一种更简单的方法可以做到这一点,比如从表中选择*,其中列2=“某物”,但我猜不是。如果需要,我会坚持手动重命名列。
$sth->execute();
while ($row = $sth->fetchAll()) {
  print $row[2];
}
SELECT COLUMN_NAME FROM information_schema.COLUMNS
WHERE TABLE_NAME = ? AND ORDINAL_POSITION = ?
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'your database schema' AND TABLE_NAME = 'the wanted table name' AND ORDINAL_POSITION = 2;