2011-04-04 8 views
2

私はすべてのデータを返すことを望んでいるPHP関数を持っています。今のところ問題は、最初の行を返すことになります。なぜなら、なぜそれがわからないのですか。PHP関数からmysqlデータを返す方法

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_data

EDITの各行にassocatedデータを取得することはできませんなぜ私が把握することはできません、私の人生のためにusername invalid dataを返す(get_user_info($user_id,'username')." ".get_user_info($user_id,'username'));をエコーのような機能を実行する場合:問題は、私は一度だけ設定ファイルを含むとするための変数を使用していたということであったように見える

EDIT2「不正なテーブル名を返す$result=mysql_query($qry);で死んでいるように見えます私はそれをもう一度呼び出そうとしたときにテーブルの名前が解除されていた。

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

クエリをエコーし​​、彼が何を実行しているかを見てください。エラーが表示された場合は、mysql_errno($ link)をエコーし​​ます。 ":" mysql_error($ link)。 "\ n"; –

+0

sqlエラーは "無効なテーブル" '" – BandonRandon

+0

です。実際にここに投稿したコードはありません。 –

答えて

1

あなたは何をしようとしているのですか?

まず、このような機能を持つというあなたの考えは、まったく素晴らしいです。ほんの少数の人々しかこれに来ません。
しかし、実装はそれほど良くないようです。

特定のユーザーデータを一度に取得するために、mysqlヘルパー関数と特殊関数の両方を作成しようとしています。どのようにして元のものを作って、後者が必要かどうかを見てみましょう。

すべてのPHP開発者はあなたのような機能を必要としますが、一般的な目的はクエリーから単一の値を得ることです。繰り返し沢山のコードを入力したり、データとエラーコントロールを取得する必要はありません。
プレースホルダを使用してクエリにデータを渡すこのような関数の例を次に示します。これらのprintf家族のプレースホルダなので、あなたはこのよう

$name = dbgetvar("SELECT name FROM users WHERE id=%d",$_GET['id']); 
ユーザー情報を取得することができ、あなたの設定ファイルにこの機能を持っ 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]; 
    } 
} 

を表す文字列と%dを表現するために%sを使用する必要がありますこの

$name = dbgetvar("SELECT id FROM users WHERE name=%s AND surname = %s", 
       $_GET['name'], 
       $_GET['surname']); 

よう

や他の多くのものは、私はあなたが専門的なfunctioが必要になります疑いますuserinfoのnはもう使用できません。しかし、この関数に基づいて実行することもできます

+0

驚くべきことに、特殊な機能についての私の考えは、単にビューページ内のSQLクエリを避けて、よりクリーンなものを保つことだったと思います。 – BandonRandon

+0

@Bandonこれは、ビューページで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もしあなたが選択されたフィールドだけを望んでいれば、クエリ( 'SELECT username、user_id FROM') fetch metho – diEcho

+0

なぜ私は返す$ data –

1

さて、あなただけだけ$data=mysql_fetch_rows($result)ので、データの1行をフェッチしていますdの最初の行を与えるata set。すべてのデータを返す場合は、whileループを使用して配列にデータを設定する必要があります。

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

次に、関数から$data_arrを返すことができます。

0

私はこの質問を投稿する際に間違いを認めました。私は関数内で使われた変数を投稿しませんでした。この変数は問題の原因となっていました。それは、質問の関数編集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'); 
?> 

はコメントをお気軽に。

関連する問題