2011-10-09 82 views
2

我試圖從MySQL數據庫(對於發票)中獲取結果,該數據庫包含多行,每行有多列。數據庫有三列:日期(文本),小時(文本)和費用(布爾)。我想獲得一個數組的數組喂到一個PHP腳本,最終產品將是相同的:來自MySQL數據庫的PHP數組陣列

$invoice = array(array("date1","hours1"),array("date2","hours2")); 

目前,我有以下代碼:

$con = mysql_connect("$host", "$username", "$password"); 
$condb = mysql_select_db("$db_name"); 
... 
120 | $sql = "SELECT date,hours FROM 'c1_log' WHERE charged=0"; 
121 | $result = mysql_query($sql,$con); 
122 | $invoice = mysql_fetch_array($result); 

當我運行代碼中,我得到了下面的PHP錯誤:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in .../dbcon.php on line 122 

是否有備用功能mysql_fetch_array(),將工作?

+2

你不應該使用單引號表名。使用反引號或者不包圍它們。這可能是導致錯誤的原因。 –

+0

謝謝,這解決了這個問題。但是,它只返回第一行。有任何想法嗎? – NickEntin

+0

另外,它並沒有象我期望的那樣返回一個數組的數組,而是一個單一的數組(第一行)。 – NickEntin

回答

0

我不認爲這是MySQL的一個fetch_all功能,您需要以編程方式得到它:

$con = mysql_connect("$host", "$username", "$password"); 
if (! mysql_select_db("$db_name")) { 
    echo "Could not select DB: " . mysql_error(); 
    exit; 
} 

$sql = "SELECT date,hours FROM `c1_log` WHERE charged=0"; 

if (! ($result = mysql_query($sql,$con)){ 
    echo "Query error: " . mysql_error(); 
    exit; 
} 

// use fetch_assoc so that you end up with array 
// keys as the column names not numbers 
while ($invoice[] = mysql_fetch_assoc($result)); 

//While loop is used to get all results from the query into an array. 


//To check your output: 
// (if in a browser echo a pre tag for nice formatting) 
echo "<pre>"; 
print_r($invoice); 
echo "</pre>"; 

//Should give you something like this.. 
//$invoice = array(0=>array("date"=>"","hours"=>""),1=>array("date"=>"","hours"=>"")); 

鏈接fetch_assoc

+1

另請注意,這些本機mysql_ *函數正在逐步淘汰。開始使用框架或至少PDO是明智的。 – Louis

+0

運行時出現以下錯誤:'查詢錯誤:您的SQL語法中有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在第一行''c1_log'WHERE charged = 0'處使用正確的語法。' – NickEntin

+0

對不起,只是注意到,用反引號替換單引號:' – Louis

0
$sql = "SELECT date,hours FROM c1_log WHERE charged=0"; 

編輯:在閱讀上面的註釋之後,請記住mysql_fetch_array應該是一個循環。所以,試試這個:

while ($invoice = mysql_fetch_array($result)) { 
    var_dump($invoice) 
}