Что вернется если выполнить SELECT запрос в PHP?

Ответ

Результат зависит от используемого драйвера (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. И опять же, терпения ноль ебать, когда потом ищешь, где же косяк.

Главная мысль, которую ты должен вынести, чувак: Нельзя просто так взять и слепо надеяться, что данные всегда будут. Всегда нужно проверять, успешен ли был запрос, и ловить возможные исключения. Иначе однажды твоё приложение просто накроется медным тазом на ровном месте, а ты будешь сидеть и думать, э бошка думай, что же пошло не так.