ATUALIZAÇÃO 2:
Então, isso é o mais otimizado que pode ser?
$DBH = new PDO( "connection string goes here" );
$STH = $DBH -> prepare( "select figure from table1" );
$STH -> execute();
$result = $STH -> fetch();
echo $result ["figure"];
$DBH = null;
ATUALIZAÇÃO 1:
Sei que posso adicionar limite à consulta sql, mas também quero me livrar do loop foreach, do qual não devo precisar.
PERGUNTA ORIGINAL:
Eu tenho o seguinte script que é bom IMO para retornar muitas linhas do banco de dados por causa da seção "foreach".
Como faço para otimizar isso, se sei que sempre vou obter apenas 1 linha do banco de dados. Se eu sei que só vou obter 1 linha do banco de dados, não vejo por que preciso do loop foreach, mas não sei como alterar o código.
$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
deve haver$STH = $DBH -> prepare
vários lugares nesta página.Respostas:
Basta buscar. obtém apenas uma linha. Portanto, nenhum loop foreach necessário: D
exemplo (ty northkildonan):
fonte
$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)
cortará a matriz retornada pela metade se você só precisar de uma matriz de valor-chave.LIMIT 1
o tempo todo? Saber que você está selecionando umUNIQUE
valor vem à mente.Você pode usar fetch e LIMIT juntos. LIMIT tem o efeito de que o banco de dados retorna apenas uma entrada, então o PHP precisa lidar com muito menos dados. Com fetch, você obtém a primeira (e única) entrada de resultado da resposta do banco de dados.
Você pode otimizar mais definindo o tipo de busca, consulte http://www.php.net/manual/de/pdostatement.fetch.php . Se você acessá-lo apenas por meio de nomes de coluna, será necessário um array numerado.
Esteja ciente da cláusula ORDER. Use ORDER ou WHERE para obter a linha necessária. Caso contrário, você obterá a primeira linha da tabela todo o tempo.
fonte
Você tentou:
fonte
$row = $DBH->query($query)->fetch()['figure']
. Sefetch
retornarfalse
porque não há resultados, o PHP irá ignorar silenciosamente a referência de chave inválida. Se algo der erradoquery
, dependendo de como você configurou o tratamento de erros, ele lançará uma exceção (desejada, na minha opinião) ou você obterá umInvalid object method reference "fetch" on "false"....
erro, uma forma que você teria obtido de qualquer maneira, porque a consulta obviamente falhou.Se você quiser apenas um único campo, pode usar fetchColumn em vez de fetch - http://www.php.net/manual/en/pdostatement.fetchcolumn.php
fonte
Você pode tentar isso para uma consulta SELECT de banco de dados com base na entrada do usuário usando PDO:
fonte
que tal usar
limit 0,1
para otimização mysqle sobre o seu código:
fonte
Graças à sugestão de Steven de usar fetchColumn, aqui está minha recomendação para cortar uma linha do seu código.
fonte