2011-12-10 26 views
5

no puedo conseguir mis autores de mi php citamysql error php - sistema de cotización

Tengo una tabla cotizaciones: Identificación, cita, la ayuda

tengo una mesa de autor: identificación, nombre , etc ...

<?php 

$DB_SERVER = "localhost"; 
$DB_USER = "root"; 
$DB_PASS = ""; 
$DB_NAME = "test"; 
$con = mysql_connect($DB_SERVER, $DB_USER, $DB_PASS); 
mysql_select_db($DB_NAME); 

$sql = mysql_query("SELECT * FROM quotes WHERE id = ".$_GET['id'], $con); 
$row = mysql_fetch_row($sql); 

$sql = mysql_query("SELECT * FROM author where aid = " . $row[1], $con); 
$row = mysql_fetch_row($sql); 


var_dump($row); 

ahora me sale este error Advertencia: mysql_fetch_row() espera parámetro de 1 a ser el recurso, boolean given en /var/www/domain.com/php.php en la línea 14 NULL

+0

No ha hecho ningún error al verificar su consulta. Usted * necesita * hacer eso después de una llamada 'mysql_query()'. De lo contrario, su script se romperá si la consulta falla. Cómo hacer esto se describe en el [manual sobre 'mysql_query()'] (http://php.net/mysql_query) o en esta [pregunta de referencia.] (Http://stackoverflow.com/questions/6198104/reference -what-is-a-perfect-code-sample-using-the-mysql-extension) –

+2

Además, el código que muestra es vulnerable a [SQL injection] (http://php.net/manual/en/security. database.sql-injection.php). Use el método de limpieza adecuado de su biblioteca (como 'mysql_real_escape_string()' para la biblioteca mysql clásica), o cambie a PDO y sentencias preparadas. –

+0

posible duplicado de [mysql_fetch_array() espera que el parámetro 1 sea resource, boolean dado en select] (http://stackoverflow.com/questions/2973202/mysql-fetch-array-expects-parameter-1-to-be-resource -boolean-given-in-select) – fuxia

Respuesta

7

si print_r($row); después de la primera consulta que se verá algo como:

Array 
(
    [0] => id 
    [1] => quote 
    [2] => aid 
) 

continuación, en su segunda consulta utiliza $row[1] que es la cita (cadena) y no el número.

$sql = mysql_query("SELECT * FROM author where aid = " . $row[1], $con); 

si se hacen eco del error (utilizando mysql_error($con)) verá algo:

Usted tiene un error en su sintaxis SQL; consulte el manual que corresponde a su versión del servidor MySQL para el sintaxis derecho al uso cerca de 'una cotización

en lugar de utilizar mysql_fetch_row uso mysql_fetch_assoc y la clave de la matriz será el nombre de la columna. De esta manera, es muy fácil recuperar datos. Y no te olvides de cerrar tu conexión.

<?php 
$_GET['id'] = 1; 
$DB_SERVER = "localhost"; 
$DB_USER = "root"; 
$DB_PASS = ""; 
$DB_NAME = "test"; 
$con = mysql_connect($DB_SERVER, $DB_USER, $DB_PASS); 
mysql_select_db($DB_NAME); 
$sql = mysql_query("SELECT * FROM quotes WHERE id = " . (int)$_GET['id'], $con); // or you can use the mysql_real_escape_string 
if(!$sql) { 
    echo mysql_error($con); 
} 
$row = mysql_fetch_assoc($sql); 
mysql_free_result($sql); 

$sql = mysql_query("SELECT * FROM author where id = " . (int)$row['aid'], $con); 
if(!$sql) { 
    echo mysql_error($con); 
} 
$row = mysql_fetch_assoc($sql); 
mysql_free_result($sql); 

print_r($row); 
mysql_close($con); 
1

Desde el manual:

mysql_query() devuelve un recurso en caso de éxito, o FALSE en caso de error.

mysql_query() también fallará y devolverá FALSE si el usuario no tiene tiene permiso para acceder a la (s) tabla (s) a las que hace referencia la consulta.

Así que acaba de hacer algún error rápida comprobación

$sql = mysql_query("SELECT * FROM author where aid = " . $row[1], $con); 
if ($sql) { 
    $row = mysql_fetch_row($sql); 
} 
else { 
    //error 
} 
+0

+1. Puede llamar a 'mysql_error ($ con)' para obtener el error específico de MySQL. –