繁体   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