2011-04-04 72 views
2

我有一個PHP函數,我希望將返回所有數據。現在的問題是,它會返回第一行然後掛出,我不知道爲什麼。如何從PHP函數返回mysql數據

function get_user_info($id,$field='') 
{ 
    //connect to database 
    include_once("../config.php"); 
    $qry= "SELECT `$field` FROM `".$user_table."` WHERE `id` ='$id'"; 
    //die($qry); 
    $result=mysql_query($qry); 
    if($result) { 
     if(mysql_num_rows($result)>0) { 
      //query successful 
      $data=mysql_fetch_row($result); 
      $user_info= $data[0]; 
     } 
     else{ 
      $user_info ="invalid field"; 
     } 

    } 
    else{ 
     $user_info="invalid data"; 
     } 
    return $user_info; 
} 

如果我運行狀回聲(get_user_info($user_id,'username')." ".get_user_info($user_id,'username'));它返回username invalid data對我的生活中,我想不通爲什麼它不會得到與get_user_data

編輯的每一行assocated數據的函數:似乎在$result=mysql_query($qry);返回不正確的表名「」被死亡

EDIT2:看起來像問題是,我只包括配置文件一次,並且使用一個變量我的表名在我第二次嘗試打電話時未被設置。

編輯3: 這裏是最後的功能

//connect to database 
if(file_exists('..config.php')){ 
    include_once("../config.php"); 
} 
function get_user_info($id,$field) 
{ 

    //get users table 
    global $user_table_name; 

    $qry= "SELECT `$field` FROM `$user_table` WHERE `id` ='$id'"; 
    $result=mysql_query($qry) or die(mysql_error()); 
    if($result) { 
     if(mysql_num_rows($result)>0) { 
      //query successful 
      $data=mysql_fetch_row($result); 
      $user_info= $data[0]; 
     } 
     else{ 
      $user_info =$qry; 
     } 

    } 
    else{ 
     $user_info="invalid data"; 
     } 
    return $user_info; 
} 
+0

回顯查詢,看看他運行了什麼,如果你有錯誤顯示,echo mysql_errno($ link)。 「:」。 mysql_error($ link)。 「\ n」 個; – 2011-04-04 07:12:24

+0

sql錯誤是「無效表」'「 – BandonRandon 2011-04-04 07:17:32

+0

所以,這不是你在這裏發佈的真實代碼? – 2011-04-04 08:01:31

回答

1

那麼我現在看到你在做什麼。

首先,你有這樣的功能的想法是絕對的輝煌。只有很少的人曾經來過它。
但是實現似乎不太好。

您正在嘗試創建mysql helper函數和專用函數以一次獲取特定用戶數據。讓我告訴你如何製作前者,然後看看是否需要後者。

每個PHP開發人員都需要像你這樣的函數,但通用目的 - 從查詢中獲取單個值,而不用輸入大量重複性的消毒參數代碼,並獲取數據和錯誤控制以及其他東西。
下面是這種功能的一個例子,使用佔位符將數據傳遞到查詢中。printf家族的這些佔位符,所以,你必須使用%s來表示一個字符串,並%d代表int

function dbgetvar(){ 
    $args = func_get_args(); 
    $query = array_shift($args); 
    foreach ($args as $key => $val) { 
    $args[$key] = mysql_real_escape_string($val); 
    } 
    $query = str_replace("%s","'%s'",$query); 
    $query = vsprintf($query, $args); 

    $res = mysql_query($query); 
    if (!$res) { 
    trigger_error("dbgetarr: ".mysql_error()." in ".$query); 
    return FALSE; 
    } else { 
    $row = mysql_fetch_row($res); 
    if (!$row) return NULL; 
    return $row[0]; 
    } 
} 

在你的配置文件中這個功能,你可以得到你的用戶信息這樣

$name = dbgetvar("SELECT name FROM users WHERE id=%d",$_GET['id']); 

和其他許多像這樣的事情

$name = dbgetvar("SELECT id FROM users WHERE name=%s AND surname = %s", 
       $_GET['name'], 
       $_GET['surname']); 

我懷疑你將需要專門的函數的n用於userinfo了。但是,它也可以做到,基於此功能

+0

真棒,我想我的專門功能的想法只是爲了避免我的視圖頁面內的SQL查詢,以保持清潔。 – BandonRandon 2011-04-04 23:08:32

+0

@Bandon在瀏覽頁面中避免SQL查詢是錯誤的想法。你的專業功能仍然屬於業務邏輯,不應該在視圖中。只有要顯示的數據應該傳遞給視圖,沒有別的。 – 2011-04-05 05:02:34

3

使用

function mysql_fetch_all($res) { 
    while($row=mysql_fetch_array($res)) { 
     $return[] = $row; 
    } 
    return $return; 
} 

$data = mysql_fetch_all($result); 
+0

[參考](http://php.net/manual/en/function.mysql-fetch-row.php) – diEcho 2011-04-04 07:13:24

+0

@Bandon如果你只想選擇字段,然後優化查詢('SELECT用戶名,user_id從')不是fetch方法 – diEcho 2011-04-04 07:16:59

+0

爲什麼做一個新的功能,當他可以返回結果集返回$ data – 2011-04-04 07:17:09

1

嗯,你只是因爲$data=mysql_fetch_rows($result)獲取數據的一行只給出d的第一行ata集。如果你想返回所有的數據,那麼你需要用while循環來填充數據。

$data_arr= array(); 
while($data=mysql_fetch_assoc($result)){ 
    array_push($data_arr, $row); 
} 

然後,您可以從函數返回$data_arr

0

我承認在發佈這個問題時我犯了一個錯誤。我沒有發佈在函數內部使用的變量。這個變量是造成這個問題的原因。該問題隨函數的編輯3中包含連接包含工作形式的最終功能。

0

嗨我也遇到了一個非常類似的情況。 我已經做了一個自定義函數來從表中返回值。 如果字段存在或不存在,您也可以通過返回true來加強它。

function getuserinfo($table, $matchid, $uid, $field) 
{ 
    $sql=mysql_query("select $field from $table where $matchid=$uid"); 
    $row=mysql_fetch_array($sql); 
    $userinfo=$row[0]; 
    return $userinfo; 
} 

您可以用上面的功能是這樣的: -

<?php echo getuserinfo('usertable', 'id', $userid, 'fullname'); 
echo getuserinfo('usertable', 'id', $userid, 'lastname'); 
?> 

隨意評論。