2012-07-05 32 views
8

Duplicar posibles:
PHP: Warning: sort() expects parameter 1 to be array, resource givenmysqli_fetch_assoc() espera parámetro de 1 a ser mysqli_result, boolean given

Soy bastante nuevo en PHP y MySQL y simplemente no puedo imaginar éste fuera. He buscado por todo el foro, pero no he encontrado una respuesta que pueda darle sentido. Originalmente estaba usando mysql_fetch_assoc() pero solo podía buscar números y recibí errores al buscar letras también. Espero estar en el camino correcto aquí. ¡Gracias de antemano por toda su ayuda!

$con = mysqli_connect($hostname,$username,$password) or die ("<script language='javascript'>alert('Unable to connect to database')</script>"); 
mysqli_select_db($con, $dbname); 

if (isset($_GET['part'])){ 
    $partid = $_GET['part']; 
    $sql = 'SELECT * 
     FROM $usertable 
     WHERE PartNumber = $partid'; 

    $result = mysqli_query($con, $sql); 
    $row = mysqli_fetch_assoc($result); 

    $partnumber = $partid; 
    $nsn = $row["NSN"]; 
    $description = $row["Description"]; 
    $quantity = $row["Quantity"]; 
    $condition = $row["Conditio"]; 
} 
+2

No olvide filtrar '$ _GET ['part']' para evitar la inyección de SQL. – honyovk

Respuesta

17

Esto ocurre cuando el resultado no es un resultado (sino un "falso" en su lugar). Debe cambiar esta línea

$sql = 'SELECT * FROM $usertable WHERE PartNumber = $partid'; 

a esto:

$sql = "SELECT * FROM $usertable WHERE PartNumber = $partid"; 

debido a que el "puede interpretar las variables $ mientras que 'no puede

funciona bien con números enteros (números), para las cadenas que necesita. para poner la variable $ en comillas simples, como

$sql = "SELECT * FROM $usertable WHERE PartNumber = '$partid' "; 

Si quieren/tienen que trabajar con comillas simples, entonces PHP no puede interpretar las variables, que tendrá que hacerlo de esta manera:

$sql = 'SELECT * FROM '.$usertable.' WHERE string_column = "'.$string.'" AND integer_column = '.$number.'; 
+0

Es porque las cadenas deben escaparse como arriba. Acabo de mejorar mi respuesta. – Sliq

+0

Muchas gracias, este fue el truco! ¡Realmente aprecio la ayuda de todos! – user1504463

+0

"Esto sucede cuando el resultado no es un resultado (sino un" falso "en su lugar)". Eso realmente me ayudó a depurar en segundos. – madhuspot

4

Usted está citando solo su instrucción de SQL que está haciendo que las variables de texto en lugar de variables.

$sql = "SELECT * 
    FROM $usertable 
    WHERE PartNumber = $partid"; 
11
mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given 

Esto significa que el primer parámetro que ha pasado es un valor lógico (verdadero o falso).

El primer parámetro es $result, y es false porque hay un error de sintaxis en la consulta.

" ... WHERE PartNumber = $partid';" 

Nunca se debe incluir directamente una variable de petición en una consulta SQL, de lo contrario los usuarios son capaces de inyectar SQL en sus consultas. (Ver SQL injection.)

Usted debe escapar de la variable:

" ... WHERE PartNumber = '" . mysqli_escape_string($conn,$partid) . "';" 

O mejor, utilizar Prepared Statements.

+0

http://www.macaerospace.info/inventory/test?part=1 funciona bien cuando solo está buscando un número | http://www.macaerospace.info/inventory/test?part=PN123 no funciona y me da el error booleano | Además, recibí un error T-VARIABLE al insertar la cadena de escape. La seguridad no es un gran problema para mí en este momento, ya que estoy tratando de hacer que esto funcione primero – user1504463

0

Lo que sucede en su código si $usertable no es una tabla válida o no incluye una columna PartNumber o parte no es un número.

debe escapar a $ Idpart y también leer el documento para mysql_fetch_assoc(), ya que puede devolver un valor lógico

2

Mysqli hace uso de la programación orientada a objetos.Trate de usar este enfoque en su lugar:

function dbCon() { 
     if($mysqli = new mysqli('$hostname','$username','$password','$databasename')) return $mysqli; else return false; 
} 

if(!dbCon()) 
exit("<script language='javascript'>alert('Unable to connect to database')</script>"); 
else $con=dbCon(); 

if (isset($_GET['part'])){ 
    $partid = $_GET['part']; 
    $sql = "SELECT * 
     FROM $usertable 
     WHERE PartNumber = $partid"; 

    $result=$con->query($sql_query); 
    $row = $result->fetch_assoc(); 

    $partnumber = $partid; 
    $nsn = $row["NSN"]; 
    $description = $row["Description"]; 
    $quantity = $row["Quantity"]; 
    $condition = $row["Conditio"]; 
} 

Avísame si tiene alguna pregunta, no pude probar este código por lo que puede que tenga que triplicará comprobarlo!

+1

Su consulta SQL no es válida. Puedes 'NOT' usar variables en una sola cadena de comillas – Twister1002

Cuestiones relacionadas