2011-12-10 66 views
5

我無法從我的PHP讓我引述作家MySQL的PHP​​的錯誤 - 報價系統

我有一個報價表: ID,報價,援助

我有一個author表: ID,名稱等等......

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

現在我得到這個錯誤 警告:和mysql_fetch_row()預計參數1是資源,布爾在/var/www/domain.com/php.php給出線14 NULL

+0

您在查詢中沒有執行任何錯誤檢查。 *您必須*做一個'的mysql_query()'調用之後。否則,如果查詢失敗,腳本將中斷。如何做到這一點是在[上'的mysql_query手冊()'](http://php.net/mysql_query)或在此概述[參考問題。](http://stackoverflow.com/questions/6198104/reference - 什麼-is-a的使用最MySQL的擴展完美個代碼採樣) –

+2

另外,你顯示代碼是易受[SQL注入](http://php.net/manual/en/security。 database.sql-injection.php)。使用適當的衛生方法(例如'mysql_real_escape_string()'用於傳統的mysql庫),或切換到PDO並準備好語句。的 –

+0

可能重複[mysql_fetch_array()預計參數1是資源,在選擇給定的boolean(http://stackoverflow.com/questions/2973202/mysql-fetch-array-expects-parameter-1-to-be-resource - 布爾賜予的,在選擇) – fuxia

回答

7

如果print_r($row);第一個查詢後,你會看到類似這樣的:

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

然後在你的第二個查詢使用$row[1]這是報價(字符串)而不是數字。

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

如果回聲(使用mysql_error($con)),你會看到一些錯誤:

您的SQL語法錯誤;檢查手冊中 對應於你的MySQL服務器版本正確的語法使用,而不是使用mysql_fetch_row使用mysql_fetch_assoc和陣列的關鍵將是列名 附近「報價

。這樣,檢索數據非常簡單。別忘了關閉你的連接。

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

manual

的mysql_query()成功返回的資源,或者在錯誤FALSE。

如果用戶沒有 有權訪問查詢引用的表,則mysql_query()也將失敗並返回FALSE。

所以只是做一些簡單的錯誤檢查

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

+1。你可以叫'mysql_error($ CON)'來獲得特定的MySQL錯誤。 –