2016-12-04 88 views
1

嗨,我一直在我的第一個大網站上工作,並嘗試創建一個PHP函數,返回一個基於給定函數被調用時的標準值時遇到問題。 我一直有使用下面的代碼有問題所有我能得到回報率爲「數據庫:1」如何將mysql的select函數作爲字符串返回?

function data_r_user($request, $username) { 
    include("login/dbconnect.php"); 
    $sqli = "SELECT " . $request . " FROM users WHERE username = " . $username; 
    $result = mysqli_query($dbconnect,$sqli) or die(); 
    return $result; 
} 

一會兒搜索完畢後我出現的跟蹤問題的事實,所有的SQL查詢的返回一個數組而不是一個字符串(我相信這是情況下,對不起,如果我錯了)

我認爲返回一個單一的結果會很容易,但它似乎並不是。

所以基本上我想要一種方法來從這個函數返回一個單一的結果;而且我對這是程序性還是客體性漠不關心。

+0

'$ return'沒有定義,並且您的查詢是無效的,開放的到SQL注入。字符串需要引用。一旦你得到查詢工作,使用fetch'$ result'並將其設置爲'$ return'。 '或die()'是沒用的,在那裏輸出一些東西,所以你知道它爲什麼會死掉,或者使用錯誤報告功能來獲取信息。 – chris85

+0

閱讀關於$ result類型的mysqli_query()的手冊 - http://php.net/manual/ru/mysqli.query.php –

+0

是的,返回是我的錯,因爲我刪除了一些項目,所以它專注於問題在哪裏。現在修復它。 – 117PeterM

回答

3

使用準備好的語句強烈建議,所以請原諒我不指着你mysqli_fetch_row而是向你展示如何安全地做到這一點:

function data_r_user($request, $username) { 
    // you want require and only do it once 
    require_once("login/dbconnect.php"); 

    $return = ''; 

    // white list the allowed columns 
    $columns_allowed = array('id', 'username', 'firstname', 'lastname'); 
    if (! in_array($request, $columns_allowed)) { 
     // if they ask for something not allowed give them nothing 
     return ''; 

    } 

    /* create a prepared statement */ 
    if ($stmt = mysqli_prepare($dbconnect, "SELECT " . $request . " FROM users WHERE username = ?")) { 

     /* bind parameters for markers */ 
     mysqli_stmt_bind_param($stmt, "s", $username); 

     /* bind result variables */ 
     mysqli_stmt_bind_result($stmt, $return); 

     /* fetch value */ 
     mysqli_stmt_fetch($stmt);  
    } 

    return $return; 
} 
+1

啊,我專注於'$用戶名',並在列上消隱。我會更新它。 – WEBjuju

+0

像這樣的白名單是一個更安全的方式。好答案。 – tadman

相關問題