PHP PDO возвращает одну строку
ОБНОВЛЕНИЕ 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, который мне не нужен.
ОРИГИНАЛЬНЫЙ ВОПРОС:
У меня есть следующий скрипт, который является хорошим IMO для возврата многих строк из базы данных из-за раздела "foreach".
Как мне оптимизировать это, если я знаю, я всегда буду получать только 1 строку из базы данных. Если я знаю, что когда-либо получу только 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;
7 ответов
Просто принеси. получает только один ряд. Так что цикл foreach не нужен:D
$row = $STH -> fetch();
пример (ты Northkildonan):
$dbh = new PDO(" --- connection string --- ");
$stmt = $dbh->prepare("SELECT name FROM mytable WHERE id=4 LIMIT 1");
$stmt->execute();
$row = $stmt->fetch();
$DBH = new PDO( "connection string goes here" );
$STH - $DBH -> prepare( "select figure from table1 ORDER BY x LIMIT 1" );
$STH -> execute();
$result = $STH -> fetch();
echo $result ["figure"];
$DBH = null;
Вы можете использовать fetch и LIMIT вместе. LIMIT приводит к тому, что база данных возвращает только одну запись, поэтому PHP должен обрабатывать очень мало данных. С fetch вы получаете первую (и единственную) запись результата из ответа базы данных.
Вы можете сделать больше оптимизации, установив тип выборки, см. http://www.php.net/manual/de/pdostatement.fetch.php. Если вы обращаетесь к нему только через имена столбцов, вам нужен нумерованный массив.
Помните о предложении ORDER. Используйте ЗАКАЗАТЬ или ГДЕ, чтобы получить нужный ряд. В противном случае вы получите первую строку в таблице со временем.
Ты пробовал:
$DBH = new PDO( "connection string goes here" );
$row = $DBH->query( "select figure from table1" )->fetch();
echo $row["figure"];
$DBH = null;
Если вам нужно только одно поле, вы можете использовать fetchColumn вместо fetch - http://www.php.net/manual/en/pdostatement.fetchcolumn.php
Вы можете попробовать это для запроса SELECT к базе данных на основе пользовательского ввода с использованием PDO:
$param = $_GET['username'];
$query=$dbh->prepare("SELECT secret FROM users WHERE username=:param");
$query->bindParam(':param', $param);
$query->execute();
$result = $query -> fetch();
print_r($result);
Как насчет использования limit 0,1
для оптимизации MySQL
и о вашем коде:
$DBH = new PDO( "connection string goes here" );
$STH - $DBH -> prepare( "select figure from table1" );
$STH -> execute();
$result = $STH ->fetch(PDO::FETCH_ASSOC)
echo $result["figure"];
$DBH = null;
Благодаря предложению Стивена использовать fetchColumn, я рекомендую сократить одну строку из вашего кода.
$DBH = new PDO( "connection string goes here" );
$STH - $DBH -> query( "select figure from table1" );
$result = $STH -> fetchColumn();
echo $result;
$DBH = null;