2010-08-05 16 views
5

Tengo un pequeño problema que no entiendo. Tengo un DB que tiene un propietario y tipo (y más fuera de curso). Quiero obtener una lista de todos los valores del tipo que tiene dueño igual al usuario actual, pero me da sólo dos resultadocrear una matriz desde la consulta mysql php

$sql = "SELECT type FROM cars WHERE owner='".mysql_real_escape_string($_SESSION['username'])."' AND selling='0' ORDER BY id DESC "; 

$result = mysql_query($sql,$con); 

print_r(mysql_fetch_array($result)); 

imprime:

Array ([0] => 18 [type] => 18) 

y

$sql = "SELECT type FROM cars WHERE owner='".mysql_real_escape_string($_SESSION['username'])."' AND selling='0' "; 

imprime:

Array ([0] => 16 [type] => 16) 

Y el resultado debería ser algo así como 19, 19, 18, 17, 16 en una matriz. Eso es todos los tipos que me tiene como conjunto como propietario.

He conseguido este trabajo ahora:

for ($x = 0; $x < mysql_num_rows($result); $x++){ 
$row = mysql_fetch_assoc($result); 
echo $row['type']; 
} 

Aquí imprimir todos los valores correctamente, pero tengo que crear una matriz con todos los valores. Pensé que podría usar array_push, pero hay una mejor forma de hacerlo. Pensé que obtendría todos los valores de tipo con una simple consulta de MySQL.

Respuesta

22

Muy a menudo esto se hace en un bucle while:

$types = array(); 

while(($row = mysql_fetch_assoc($result))) { 
    $types[] = $row['type']; 
} 

Tener un vistazo a los ejemplos de el documentation.

Los métodos mysql_fetch_* siempre tendrán la siguiente elemento del conjunto de resultados:

Devuelve una matriz de cadenas que corresponde a la fila recuperada, o FALSE si no hay más filas.

Es por eso que el while loops funciona. Si ya no hay filas, $row será false y existirá el bucle while.

Sólo parece que mysql_fetch_array obtiene más de una fila, ya que por defecto se pone el resultado como normal and as associative value:

Mediante el uso de MYSQL_BOTH (por defecto), obtendrá una matriz con ambos índices asociativos y número .

Su ejemplo muestra que es mejor, se obtiene el mismo valor 18 y se puede acceder a él a través de $v[0] o $v['type'].

2

Es necesario para recorrer ...

$typeArray = array(); 
$query = "select * from whatever"; 
$result = mysql_query($query); 

if ($result) { 
    while ($record = mysql_fetch_array($results)) $typeArray[] = $record['type']; 
} 
0
$type_array = array();  
while($row = mysql_fetch_assoc($result)) { 
    $type_array[] = $row['type']; 
} 
0
while($row = mysql_fetch_assoc($result)) { 
    echo $row['type']; 
} 
+0

Su código ya está haciendo esto. Él quiere que se convierta en una matriz. Echoing no va a resolver este problema. – Treffynnon

0

También podría hacer la vida más fácil usando un contenedor, p.con Adodb:

$myarray=$db->GetCol("SELECT type FROM cars ". 
    "WHERE owner=? and selling=0", 
    array($_SESSION['username'])); 

Un buen envoltorio hará todo su escape para usted también, haciendo las cosas más fáciles de leer.

2
THE CORRECT WAY ************************ THE CORRECT WAY 

while($rows[] = mysqli_fetch_assoc($result)); 
array_pop($rows); // pop the last row off, which is an empty row 
+0

¡SÍ! Esta es la forma CORRECTA. –

+0

Él no está usando mysqli él está usando mysql heredado – DropHit

+2

Legacy mysql? Debe referirse a Mysql obsoleto. –

0

Es posible que desee consultar el artículo de SQL Injection en Wikipedia. Mire en la parte "Conversión hexadecimal" para encontrar una pequeña función para hacer sus comandos SQL y devolver una matriz con la información contenida en ella.

https://en.wikipedia.org/wiki/SQL_injection

escribí la función dosql() porque me cansé de tener mis comandos SQL de ejecución por todo el lugar, olvidando para comprobar si hay errores, y ser capaz de registrar todos mis comandos a un archivo de registro para ver luego si es necesario. La rutina es gratuita para quien quiera usarla para cualquier propósito. De hecho, me he expandido en la función un poco porque quería hacer más, pero esta función básica es un buen punto de partida para recuperar la salida de una llamada SQL.

Cuestiones relacionadas