2011-10-09 79 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) 
}