PHP 内爆值

标签 php implode

如何从下面的数组中获取单个值?第 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_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.'/';
    }
}

关于PHP 内爆值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54661928/

相关文章:

php - 使用 GD 库将 bmp 图像写入目录

php - 将多个文件名 (img_path) 保存在一行中,以逗号或 | 分隔

php - mySQL 完全外连接与内连接?

php - 在php中将关联数组插入MySQL数据库

PHP - 字符串替换语法错误 : illegal character

arrays - bash 内爆数组(转为字符串)

php - 使用内爆创建新表

php - 使用 PHPUnit 7 测试旧的 PHP 版本

php - Laravel 5 POST 路由到索引而不是存储