Ответ
Результат зависит от используемого драйвера (PDO или mysqli) и метода выборки.
С PDO (как я чаще всего использую):
$stmt = $pdo->query("SELECT id, name FROM users WHERE active = 1");
// Вернет массив всех строк как ассоциативные массивы
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);
// Пример: [ ['id' => 1, 'name' => 'Alice'], ['id' => 2, 'name' => 'Bob'] ]
// Или можно получать строки по одной
while ($row = $stmt->fetch(PDO::FETCH_OBJ)) {
echo $row->name; // Объект stdClass
}
Если строк нет, fetchAll() вернет пустой массив []. При ошибке в запросе (например, синтаксической) будет выброшено исключение PDOException, если установлен режим PDO::ERRMODE_EXCEPTION.
С MySQLi:
$result = $mysqli->query("SELECT name FROM users");
// Вернет все строки как ассоциативный массив
$rows = $result->fetch_all(MYSQLI_ASSOC);
Если запрос не вернул данных, $rows будет пустым массивом. При неудачном запросе (например, ошибка в SQL) $result будет false.
Ключевой момент: Всегда нужно проверять результат на успешность и обрабатывать потенциальные исключения, а не полагаться на данные по умолчанию.
Ответ 18+ 🔞
Смотри, тут вообще-то всё зависит от того, какой драйвер ты юзаешь — PDO или mysqli, и как именно данные выбираешь. В общем, разбираемся, ёпта.
Если у тебя PDO (а я его, честно говоря, чаще всего и юзаю):
$stmt = $pdo->query("SELECT id, name FROM users WHERE active = 1");
// Тут можно сразу всё выгрести в один массив, где каждая строка — ассоциативный массив
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);
// Получишь что-то типа: [ ['id' => 1, 'name' => 'Alice'], ['id' => 2, 'name' => 'Bob'] ]
// А можно и по одной строке тащить, если овердохуища данных
while ($row = $stmt->fetch(PDO::FETCH_OBJ)) {
echo $row->name; // Теперь $row — это объект stdClass, обращайся к полям через стрелочку
}
Если строк в базе нихуя нет, то fetchAll() тебе просто вернёт пустой массив []. А вот если в самом запросе какая-то дичь, синтаксическая ошибка, и у тебя включён режим PDO::ERRMODE_EXCEPTION — то тебе в лицо прилетит исключение PDOException. Без этого режима — просто молча вернёт false, и потом сам будешь ебаться с отладкой, доверия ебать ноль к такому коду.
А теперь смотрим на MySQLi:
$result = $mysqli->query("SELECT name FROM users");
// Тут тоже можно всё разом получить
$rows = $result->fetch_all(MYSQLI_ASSOC);
Если запрос прошёл, но данных нет — $rows будет пустым массивом. А вот если сам запрос нихуя не сработал (опечатка в названии таблицы, например), то $result будет false. И опять же, терпения ноль ебать, когда потом ищешь, где же косяк.
Главная мысль, которую ты должен вынести, чувак: Нельзя просто так взять и слепо надеяться, что данные всегда будут. Всегда нужно проверять, успешен ли был запрос, и ловить возможные исключения. Иначе однажды твоё приложение просто накроется медным тазом на ровном месте, а ты будешь сидеть и думать, э бошка думай, что же пошло не так.