PHP PDO возвращает одну строку - PullRequest
96 голосов
/ 28 марта 2011

ОБНОВЛЕНИЕ 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 строку из базы данных. Если я знаю, что получу только одну строку из базы данных, я не понимаю, зачем мне нужен цикл 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 ]

188 голосов
/ 28 марта 2011

Просто принеси.получает только один ряд.Так что цикл 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();
14 голосов
/ 28 марта 2011
$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.Используйте ЗАКАЗ или ГДЕ, чтобы получить нужный ряд.В противном случае вы получите первую строку в таблице со временем.

12 голосов
/ 13 февраля 2015

Вы пробовали:

$DBH = new PDO( "connection string goes here" );
$row = $DBH->query( "select figure from table1" )->fetch();
echo $row["figure"];
$DBH = null;
6 голосов
/ 12 июня 2014

Вы можете попробовать это для запроса к базе данных 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);
6 голосов
/ 28 марта 2011

Если вам нужно только одно поле, вы можете использовать fetchColumn вместо fetch - http://www.php.net/manual/en/pdostatement.fetchcolumn.php

3 голосов
/ 28 марта 2011

Как насчет использования 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;
1 голос
/ 02 сентября 2013

Благодаря предложению Стивена использовать fetchColumn, я рекомендую сократить одну строку из вашего кода.

$DBH = new PDO( "connection string goes here" );
$STH - $DBH -> query( "select figure from table1" );
$result = $STH -> fetchColumn();
echo $result;
$DBH = null;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...