2016-12-04 44 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

相关问题