2011-04-04 3 views
2

У меня есть функция php, которая, я надеюсь, вернет все данные. Проблема прямо сейчас заключается в том, что она вернет первую строку, а затем отключится, и я не уверен, почему.как вернуть данные mysql из 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; 
} 

Если я запускаю функцию как эхо (get_user_info($user_id,'username')." ".get_user_info($user_id,'username')); возвращает username invalid data Для жизни меня я не могу понять, почему он не будет получать данные assocated с каждой строкой get_user_data

EDIT: кажется, умирает в $result=mysql_query($qry);, которая возвращает неверное имя таблицы «»

EDIT2: Похоже, проблема заключалась в том, что я только в том числе конфигурационный файл один раз и использовать переменную для мое имя таблицы, которое становилось неуспешным, когда я пытался называть его второй раз.

EDIT 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; 
} 
+0

эхо-запрос, посмотрите, что он запустил, и если у вас есть сообщение об ошибке, echo mysql_errno ($ link). ":". mysql_error ($ link). "\ П"; –

+0

Ошибка sql - это «недопустимая таблица» « – BandonRandon

+0

так, это не настоящий код, который вы разместили здесь? –

ответ

1

Ну, теперь я вижу, что вы пытаетесь сделать.

Прежде всего, ваша идея иметь такую ​​функцию абсолютно блестящая. Лишь немногие люди приходят к нему.
Но реализация кажется не очень хорошо.

Вы пытаетесь создать как вспомогательную функцию 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']); 

Я сомневаюсь, что вы будете нуждаться в специализированной Functio n для userinfo. Однако это также можно сделать на основе этой функции

+0

Удивительно, я полагаю, что моя идея специализированной функции заключалась в том, чтобы избежать запросов SQL внутри моих страниц просмотра, чтобы все было чище. – BandonRandon

+0

@ Бандон, это неправильная идея избежать запросов SQL на страницах просмотра. ваша специализированная функция по-прежнему относится к бизнес-логике и не должна быть также в представлении. Только данные для отображения должны быть переданы в представление, и больше ничего. –

3

использование

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

и

$data = mysql_fetch_all($result); 
+0

[Ссылка] (http://php.net/manual/en/function.mysql-fetch-row.php) – diEcho

+0

@Bandon, если u хочет только выбранное поле, тогда оптимизируйте Query ('SELECT username, user_id FROM'), а не fetch metho – diEcho

+0

Зачем создавать новую функцию, когда он может вернуть результирующий набор с возвратом $ data –

1

Ну вы только выборку одной строки данных, так как $data=mysql_fetch_rows($result) только дает первую строку d ata комплект. Если вы хотите вернуть все данные, вам нужно будет заполнить массив данными, используя цикл while.

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

Тогда вы можете просто вернуть $data_arr из функции.

0

Признаюсь, что я допустил ошибку при публикации этого вопроса. Я не публиковал переменную, которая использовалась внутри функций. Эта переменная была причиной этой проблемы. Это наряду с включением связи внутри функции Edit 3 вопроса содержит окончательную функцию в рабочей форме.

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

Прокоментируй.

Смежные вопросы