[英]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.