如何从php函数返回mysql数据
我有一个php函数,我希望它能返回所有数据。现在的问题是,它将返回第一行名为“然后挂起”,我不知道为什么如何从php函数返回mysql数据,php,mysql,function,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);
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\u info($user\u id,'username')。“”。get_user\u info($user\u id,'username'))
它返回用户名无效数据
对于我来说,我不明白为什么它不能获取与每行获取用户数据关联的数据
编辑:它似乎在$result=mysql\u查询($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;
}
使用
及
您只获取一行数据,因为$data=mysql\u fetch\u rows($result)
只提供数据集的第一行。如果要返回所有数据,则需要使用while循环用数据填充数组
$data_arr= array();
while($data=mysql_fetch_assoc($result)){
array_push($data_arr, $row);
}
然后您可以从函数返回$data\u arr
。我承认我在发布此问题时犯了一个错误。我没有发布函数中使用的变量。这个变量就是导致问题的原因。除了包含问题的函数edit3中的连接外,还包含工作形式中的最终函数 我现在明白你想做什么了
首先,你有这样的功能的想法是绝对聪明的。只有很少的人来参加。
但实施似乎并不那么好
您正在尝试创建mysql助手函数和专用函数,以同时获取特定的用户数据。让我告诉你如何做前一个,然后让我们看看你是否需要后一个
每个php开发人员都需要一个类似于您的函数,但它是通用函数——从查询中获取单个值,而无需键入大量重复的清理参数代码,也无需获取数据、错误控制等内容。
下面是此类函数的一个示例,使用占位符将数据传递到查询中。这些族的占位符,因此,您必须使用%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']);
我怀疑你将需要专门的功能为用户信息了。但是,也可以这样做,基于此功能,我也遇到了非常类似的情况。
我制作了一个自定义函数来返回表中的值。
如果字段存在或不存在,还可以通过返回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' );
?>
请随意评论。回显查询,查看他运行的内容,如果您有错误,请显示它们,回显mysql\u errno($link)。": " . mysql\u错误($link)。“\n”;sql错误为“无效表“””,因此,这不是您发布在此处的真实代码?@col.Shrapnel,现在是。我不认为这是问题所在。你不应该在函数中包含任何内容。而且您的解决方案很可能易受SQL攻击injection@Bandon如果您只需要选定字段,则优化查询(从
中选择用户名、用户id)而不是获取方法。当他可以返回返回$datareturn的结果集时,为什么要创建一个新函数?这正是我试图做的。只需在一个通用函数中执行此操作,这样我就可以请求所需的行。太棒了,我想我的专用函数只是为了避免视图页面中的SQL查询,以保持更整洁。@Bandon在视图页面中避免SQL查询的想法是错误的。您的专用功能仍然属于业务逻辑,不应该也在视图中。只应将要显示的数据传递给视图,而不传递其他数据。
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' );
?>