2011-12-10 17 views
5

non riesco a ottenere i miei autori dal mio php citamysql errore di PHP - Sistema di citazione

Ho una tabella citazioni: id, citazione, aiuto

Ho una tabella autore: id, nome , ecc ...

<?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); 

ora ottengo questo errore Attenzione: mysql_fetch_row() si aspetta parametro 1 per essere risorsa, boolean given in /var/www/domain.com/php.php on line 14 NULL

+0

Non si sta verificando alcun errore nella query. È * necessario * farlo dopo una chiamata a 'mysql_query()'. In caso contrario, lo script si interromperà se la query non riesce. Come farlo è descritto nel [manuale su 'mysql_query()'] (http://php.net/mysql_query) o in questa [domanda di riferimento.] (Http://stackoverflow.com/questions/6198104/reference -what-is-a-perfect-code-sample-using-the-mysql-extension) –

+2

Inoltre, il codice che mostri è vulnerabile a [SQL injection] (http://php.net/manual/en/security. database.sql-injection.php). Usa il metodo di sanificazione appropriato della tua libreria (come 'mysql_real_escape_string()' per la classica libreria mysql), o passa a PDO e istruzioni preparate. –

+0

possibile duplicato di [mysql_fetch_array() si aspetta che il parametro 1 sia risorsa, booleano dato in select] (http://stackoverflow.com/questions/2973202/mysql-fetch-array-expects-parameter-1-to-be-resource -boolean-given-in-select) – fuxia

risposta

7

se print_r($row); dopo la prima query si vedrà qualcosa di simile:

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

poi sulla vostra seconda query si utilizza $row[1] che è la citazione (stringa) e non il numero.

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

se echo l'errore (utilizzando mysql_error($con)) si vedrà qualcosa:

Hai un errore nella sintassi SQL; controllare il manuale che corrisponde alla versione del server MySQL per la sintassi diritto di utilizzare vicino 'una citazione

invece di utilizzare mysql_fetch_row uso mysql_fetch_assoc e la chiave della matrice sarà il nome della colonna. In questo modo, è molto facile recuperare i dati. E non dimenticare di chiudere la connessione.

<?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

Dal manual:

mysql_query() restituisce una risorsa in caso di successo, o FALSE in caso di errore.

mysql_query() non riuscirà e restituirà FALSE se l'utente non dispone di per accedere alle tabelle a cui fa riferimento la query.

Quindi, basta fare qualche errore rapido controllo

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

+1. Puoi chiamare 'mysql_error ($ con)' per ottenere lo specifico errore MySQL. –