Вы можете использовать что-то вроде $firstrow = $db->query($query)->fetch()
, но это не очень хорошая практика в отношении функций, которые не гарантируют возврата объекта.
Функция query() может возвращать FALSE при ошибке, а динамический вызов fetch() будет фатальной ошибкой. Вы не можете позвонить ->fetch()
по скалярному значению FALSE.
Например, попробуйте выполнить следующие действия и сценарий взорвется:
$firstrow = $db->query("SELECT * FROM table_that_does_not_exist")->fetch();
PDO поддерживает режим бросать исключения вместо возврата FALSE, так что в этом случае вы гарантированно либо query()->fetch()
работы, либо запрос() выдаст исключение, поэтому вы никогда не достигнете фатальной ошибки. Но вы, возможно, не используете режим исключения PDO.
Ответ от @GeorgeCummins указывает, что существует метод fetchColumn()
, который вы можете использовать, когда у вас есть объект PDOStatement, это хороший способ получить один столбец. Если вам нужен только один столбец, назовите этот столбец в качестве только столбца в списке выбора, а затем всегда использовать fetchColumn(0)
:
$oneValue = $db->query("SELECT oneColumn FROM table")->fetchColumn(0);
В противном случае, если вы используете выборки(), это возвращает массив. PHP 5.4 поддерживает разрывы в матрице:
$oneValue = $db->query("SELECT oneColumn FROM table")->fetch()[0];
Но если вы используете PHP 5.3 или ранее, это не поддерживается. И я никогда не пробовал его с массивом, возвращаемым PDOStatement, поэтому, если он фактически возвращает ArrayObject или что-то, что это может не сработать.
Зачем вам это нужно? Это намного чище. – jeremy
его не единственный столбец. Я согласен с Джереми, его единственными 2 строками, но мне было интересно, есть ли метод, о котором я не знаю, чтобы сделать трюк. –