如何从php函数返回mysql数据

时间:2011-04-04 07:09:30

标签: php mysql 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对于我的生活,我无法弄清楚为什么它不能将数据与{{1}的每一行相关联}

编辑:似乎在get_user_data死亡,这会返回错误的表格名称''

EDIT2:看起来问题是我只包含配置文件一次并使用我的表名变量,当我第二次尝试调用时,该变量未被设置。

编辑3: 这是最后的功能

$result=mysql_query($qry);

5 个答案:

答案 0 :(得分:3)

使用

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

$data = mysql_fetch_all($result);

答案 1 :(得分:2)

我现在看到你想做什么。

首先,你对这种功能的想法非常棒。只有少数人来过它 但实施似乎并不那么好。

您正在尝试创建mysql帮助程序函数和专用函数以立即获取特定用户数据。让我告诉你如何制作前者,然后让我们看看你是否需要后者。

每个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的专门功能。但是,也可以基于此功能

来完成

答案 2 :(得分:1)

嗯,您只获取一行数据,因为$data=mysql_fetch_rows($result)仅提供数据集的第一行。如果要返回所有数据,则需要使用while循环使用数据填充数组。

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

然后你可以从函数中返回$data_arr

答案 3 :(得分:0)

我承认在发布这个问题时我犯了一个错误。我没有发布函数内部使用的变量。这个变量是造成这个问题的原因。这与问题编辑3中的连接一起包含了工作形式的最终功能。

答案 4 :(得分:0)

您好我也遇到过非常类似的情况。 我已经创建了一个自定义函数来从表中返回值。 如果字段存在与否,您也可以通过返回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' );
?>

随意发表评论。