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;