php - PHP 内爆值
问题描述
如何从下面的数组中获取单个值?第 19 行的当前结果就像 19 重复了两次;
E:/数据库/用户/ 1919 /
我只需要 19,所以 URL 看起来像;
E:/数据库/用户/ 19 /
<?php
$db = new SQLite3('C:/inetpub/wwwroot/database.db');
$row = $db->query('select id from users');
while ($lastrow = $row->fetchArray())
{
$id = implode($lastrow);
}
$database = 'E:/database/users/'.$id.'/';
?>
解决方案
SQLite3Result::fetchArray
默认情况下使用该SQLITE3_BOTH
模式,该模式返回选定列的 0 索引和关联数组。
这意味着您将收到如下值:
$lastrow = array(
0 => '19',
'id' => '19'
);
要解决此问题,您只需更改为使用或fetchArray
检索单个值。SQLITE3_NUM
SQLITE3_ASSOC
$row = $db->query('select id from users');
while ($lastrow = $row->fetchArray(SQLITE3_NUM)) {
$id = implode($lastrow);
//list($id) = $lastrow; //alternative to implode
}
$database = 'E:/database/users/'.$id.'/';
或者,您只需要指定要检索的列名,而不是使用implode
.
$row = $db->query('select id from users');
while ($lastrow = $row->fetchArray()) {
$id = $lastrow['id'];
}
$database = 'E:/database/users/'.$id.'/';
由于您似乎只需要最后一行,因此我建议您更改查询以提高整体性能。
SELECT MAX(id) FROM users
或者
SELECT id FROM users ORDER BY id DESC LIMIT 1
允许您在不遍历整个用户表的情况下检索最后一个 id。
if ($row = $db->query('SELECT MAX(id) FROM users')) {
if ($row->numColumns()) {
list($id) = $row->fetchArray(SQLITE3_NUM);
$database = 'E:/database/users/'.$id.'/';
}
}
推荐阅读
- android - params.setMargins 不能以编程方式工作
- python - 尝试在机器学习程序中使用 MNIST/EMNIST 字母数据集时出现 ValueError
- python - Pytest“不使用参数”错误,但一切看起来都正确?
- r - 在“permute”R 包中定义置换设计
- java - 获取 StackOverFlowError
- python - 将字符串拆分(分解)为多列和多行 - Python
- list - 在球拍中,我如何使用结构而不是仅使用高阶函数或递归来查找列表的长度
- android - 在启用Split = false的Android应用程序包中,应用程序内语言切换不起作用
- python - 创建一个空列表,在函数中添加点,但尝试回调时出错
- compilation - 寄存器分配器实际上是如何工作的?