LINUX.ORG.RU

Вывести все строки из базы (opencart)

 ,


0

1

В базе находится 318 строк, код который их должен вывести, но не выводит:

public function getalls() {
    $prequery = $this->db->query("SELECT DISTINCT * FROM "
        . DB_PREFIX . "hc");
    return $prequery->rows;
}
Вообще ничего не выводит. При этом, этот же код, но если брать не hc а например товары, то он выводит все 4 тысячи строк!

Так же, если этот код написать с лимитом, то он тоже выодит, например так (выведет 200 строк):
public function getalls() {
    $prequery = $this->db->query("SELECT DISTINCT * FROM "
        . DB_PREFIX . "hc LIMIT 200");
    return $prequery->rows;
}
Структура в таблице hc
Структура в таблице товаров (которые этим же кодом почему-то все выводятся)


Ответ на: комментарий от Darth_Revan

Про rows: да, действительно, у меня в таблице hc есть колонка page, в нее сохраняется полный html-код в виде base64 (порядка 3-6 тысяч html строк), и так каждая из 318. Так вот, когда я выставил у всех 318 строк page в null (вместо хтмл кода) - все заработало, вывел все 318 строк.

Как это повиксить? Что бы в каждой строке, в колонку page можно было засунуть хотя бы по 3 тысячи строк хтмлкода в виде base64?

shiva
() автор топика
Последнее исправление: shiva (всего исправлений: 1)
Ответ на: комментарий от shiva

Отдай пыху больше памяти, судя по всему он на нехватки памяти валится, где-то в логах должна быть ошибка по этому поводу.

ya-betmen ★★★★★
()
Ответ на: комментарий от Darth_Revan

А в коде query (класса mysqli) это: [code] public function query($sql) { $query = $this->connection->query($sql);

	if (!$this->connection->errno) {
		if ($query instanceof \mysqli_result) {
			$data = array();

			while ($row = $query->fetch_assoc()) {
				$data[] = $row;
			}

			$result = new \stdClass();
			$result->num_rows = $query->num_rows;
			$result->row = isset($data[0]) ? $data[0] : array();
			$result->rows = $data;

			$query->close();

			return $result;
		} else {
			return true;
		}
	} else {
		throw new \Exception('Error: ' . $this->connection->error  . '<br />Error No: ' . $this->connection->errno . '<br />' . $sql);
	}
}

[/code]

shiva
() автор топика
Ответ на: комментарий от shiva

Ага, значит, если бы mysqli использовался непосредственно, то код был бы такой:

public function getalls(): ?array
{
    $prequery = $this->conn->query(
        'SELECT DISTINCT * FROM ' . DB_PREFIX . 'hc'
    );

    if (!$this->conn->errno) {
        if ($prequery instanceof \mysqli_result) {
            $rows = [];

            while ($row = $prequery->fetch_assoc()) {
                $rows[] = $row;
            }

            $prequery->close();
            return $rows;
        } else {
            return null;
        }
    } else {
        throw new \Exception("Error: {$this->conn->error}");
    }
}
Darth_Revan ★★★★★
()
Последнее исправление: Darth_Revan (всего исправлений: 1)
Ответ на: комментарий от Darth_Revan

Кстати, а в чём смысл DISTINCT тут?

Лапшекод и индопрограммер (ник же шива :-)

shiva
() автор топика
Последнее исправление: shiva (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.