簡體   English   中英

如何從php函數返回mysql數據

[英]how to return mysql data from a php function

我有一個PHP函數,希望能返回所有數據。 現在的問題是它將返回第一行,然后掛出,我不確定為什么。

    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; 
}

如果我運行像echo這樣的函數(get_user_info($user_id,'username')." ".get_user_info($user_id,'username')); 它返回username invalid data對於我來說,我不知道為什么它不會將數據與get_user_data每一行關聯

編輯:它似乎在死於$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; 
}

采用

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

$data = mysql_fetch_all($result);

好吧,我現在知道您要做什么。

首先,您具有這種功能的想法絕對是明智的。 只有很少的人來參加。
但是實現似乎不是那么好。

您試圖同時創建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']);

我懷疑您是否將需要userinfo的專門功能。 但是,基於此功能也可以完成

好吧,因為$data=mysql_fetch_rows($result)僅給出數據集的第一行,所以您僅獲取一行數據。 如果要返回所有數據,則需要使用while循環用數據填充數組。

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

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

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

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

隨時發表評論。

我承認發布此問題時犯了一個錯誤。 我沒有發布在函數內部使用的變量。 導致此問題的原因是此變量。 問題的功能Edit 3以及內部包含的連接都包含工作形式的最終功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM