ОБНОВЛЕНИЕ 2:
Так это максимально оптимизированный вариант?
$DBH = new PDO( "connection string goes here" );
$STH = $DBH -> prepare( "select figure from table1" );
$STH -> execute();
$result = $STH -> fetch();
echo $result ["figure"];
$DBH = null;
ОБНОВЛЕНИЕ 1:
Я знаю, что могу добавить ограничение на sql-запрос, но я также хочу избавиться от цикла foreach, который мне не нужен.
ОРИГИНАЛЬНЫЙ ВОПРОС:
У меня есть следующий сценарий, который является хорошим ИМО для возврата множества строк из базы данных из-за раздела «foreach».
Как мне это оптимизировать, если я знаю, что всегда буду получать только 1 строку из базы данных. Если я знаю, что когда-либо получу только одну строку из базы данных, я не понимаю, зачем мне нужен цикл foreach, но я не знаю, как изменить код.
$DBH = new PDO( "connection string goes here" );
$STH = $DBH -> prepare( "select figure from table1" );
$STH -> execute();
$result = $STH -> fetchAll();
foreach( $result as $row ) {
echo $row["figure"];
}
$DBH = null;
$STH - $DBH -> prepare
должно быть$STH = $DBH -> prepare
несколько мест на этой странице.Ответы:
Просто принеси. получает только одну строку. Таким образом, цикл foreach не требуется: D
пример (ты норткилдонан):
источник
$dbh = new PDO(" --- connection string --- "); $stmt = $dbh->prepare("SELECT name FROM mytable WHERE id=4 LIMIT 1"); $stmt->execute(); $row = $stmt->fetch();
fetch(PDO::FETCH_ASSOC)
разрежет возвращаемый массив пополам, если вам нужен только массив значений ключа.LIMIT 1
все время? НаUNIQUE
ум приходит осознание того, что вы выбираете ценность.Вы можете использовать выборку и LIMIT вместе. LIMIT приводит к тому, что база данных возвращает только одну запись, поэтому PHP должен обрабатывать гораздо меньше данных. С помощью выборки вы получаете первую (и единственную) запись результата из ответа базы данных.
Вы можете сделать больше оптимизации, установив тип выборки, см. Http://www.php.net/manual/de/pdostatement.fetch.php . Если вы обращаетесь к нему только через имена столбцов, вам нужен нумерованный массив.
Помните о предложении ORDER. Используйте ORDER или WHERE, чтобы получить нужную строку. В противном случае вы всегда будете получать первую строку в таблице.
источник
Ты пробовал:
источник
$row = $DBH->query($query)->fetch()['figure']
. Еслиfetch
возвращаетсяfalse
из-за отсутствия результатов, PHP будет игнорировать неверную ссылку на ключ. Если что-то пойдет не такquery
, в зависимости от того, как вы настроили обработку ошибок, оно либо вызовет исключение (желаемое, на мой взгляд), либо вы получитеInvalid object method reference "fetch" on "false"....
ошибку, форму которой вы бы в любом случае получили, потому что запрос явно не удался.Если вам нужно только одно поле, вы можете использовать fetchColumn вместо fetch - http://www.php.net/manual/en/pdostatement.fetchcolumn.php
источник
Вы можете попробовать это для запроса SELECT базы данных на основе пользовательского ввода с использованием PDO:
источник
как насчет использования
limit 0,1
для оптимизации mysqlи о вашем коде:
источник
Благодаря предложению Стивена использовать fetchColumn, вот моя рекомендация сократить одну строку из вашего кода.
источник