首页 > 解决方案 > 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.'/';
?>

标签: phpimplode

解决方案


SQLite3Result::fetchArray默认情况下使用该SQLITE3_BOTH模式,该模式返回选定列的 0 索引和关联数组。

这意味着您将收到如下值:

$lastrow = array(
   0 => '19',
   'id' => '19'
);

要解决此问题,您只需更改为使用或fetchArray检索单个值。SQLITE3_NUMSQLITE3_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.'/';
    }
}

推荐阅读