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
Позволяет вам получать последний идентификатор без итерации по всей таблице пользователей.
if ($row = $db->query('SELECT MAX(id) FROM users')) {
if ($row->numColumns()) {
list($id) = $row->fetchArray(SQLITE3_NUM);
$database = 'E:/database/users/'.$id.'/';
}
}