如何从下面的数组中获取单个值?第 19 行的当前结果就像 19 重复两次一样;
E:/database/users/1919/
我只需要 19,所以 URL 看起来像这样;
E:/database/users/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.'/';
}
}
关于PHP 内爆值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54661928/