ACTUALIZACIÓN 2:
Entonces, ¿es esto lo más optimizado que puede obtener?
$DBH = new PDO( "connection string goes here" );
$STH = $DBH -> prepare( "select figure from table1" );
$STH -> execute();
$result = $STH -> fetch();
echo $result ["figure"];
$DBH = null;
ACTUALIZACIÓN 1:
Sé que puedo agregar un límite a la consulta SQL, pero también quiero deshacerme del bucle foreach, que no debería necesitar.
PREGUNTA ORIGINAL:
Tengo el siguiente script que es bueno en mi opinión para devolver muchas filas de la base de datos debido a la sección "foreach".
¿Cómo optimizo esto, si sé que siempre obtendré solo 1 fila de la base de datos? Si sé que solo obtendré 1 fila de la base de datos, no veo por qué necesito el bucle foreach, pero no sé cómo cambiar el 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
debe haber$STH = $DBH -> prepare
varios lugares en esta página.Respuestas:
Solo busca. solo obtiene una fila. Entonces no se necesita bucle foreach: D
ejemplo (ty northkildonan):
fuente
$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á la matriz devuelta a la mitad si solo necesita una matriz clave-valor.LIMIT 1
todo el tiempo? MeUNIQUE
viene a la mente saber que está seleccionando un valor.Puede utilizar fetch y LIMIT juntos. LIMIT tiene el efecto de que la base de datos devuelve solo una entrada, por lo que PHP tiene que manejar muy menos datos. Con fetch obtienes la primera (y única) entrada de resultado de la respuesta de la base de datos.
Puede optimizar más configurando el tipo de búsqueda, consulte http://www.php.net/manual/de/pdostatement.fetch.php . Si accede a él solo a través de nombres de columna, necesita una matriz numerada.
Tenga en cuenta la cláusula ORDER. Use ORDER o WHERE para obtener la fila necesaria. De lo contrario, obtendrá la primera fila de la tabla todo el tiempo.
fuente
Has probado:
fuente
$row = $DBH->query($query)->fetch()['figure']
. Sifetch
regresafalse
porque no hay resultados, PHP ignorará silenciosamente la referencia de clave no válida. Si algo sale malquery
, dependiendo de cómo haya configurado su manejo de errores, arrojará una Excepción (deseada, en mi opinión) o obtendrá unInvalid object method reference "fetch" on "false"....
error, una forma que habría obtenido de todos modos porque la consulta obviamente falló.Si desea un solo campo, puede usar fetchColumn en lugar de fetch - http://www.php.net/manual/en/pdostatement.fetchcolumn.php
fuente
Puede probar esto para una consulta SELECT de la base de datos basada en la entrada del usuario usando PDO:
fuente
¿Qué tal usar
limit 0,1
para la optimización de mysql?y sobre tu código:
fuente
Gracias a la sugerencia de Steven de usar fetchColumn, aquí está mi recomendación de acortar una línea de su código.
fuente