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();пример (ty 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 вместе. Ограничение приводит к тому, что база данных возвращает только одну запись, поэтому PHP должен обрабатывать очень мало данных. С помощью fetch вы получаете первую (и единственную) запись результата из базы данных reponse.
вы можете сделать больше оптимизации, установив тип выборки, см. 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
вы можете попробовать это для запроса выбора базы данных на основе пользовательского ввода с помощью 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, вот моя рекомендация, чтобы сократить 1 строку из вашего кода.
$DBH = new PDO( "connection string goes here" ); $STH - $DBH -> query( "select figure from table1" ); $result = $STH -> fetchColumn(); echo $result; $DBH = null;
Comments