Php 如何以字符串形式返回MySQL select函数?

Php 如何以字符串形式返回MySQL select函数?,php,mysql,function,Php,Mysql,Function,我一直在开发我的第一个大型网站,在尝试创建一个PHP函数时遇到了一个问题,该函数根据调用函数时给定的条件返回一个值 我在使用下面的代码时遇到了问题,我只能返回“DATABASE:1” 在搜索了一段时间后,我似乎发现了一个问题,即所有SQL查询都返回一个数组而不是一个字符串(我相信情况就是这样,如果我错了,很抱歉) 我原以为返回一个结果会很容易,但事实似乎并非如此 因此,基本上我想要一种从这个函数返回单个结果的方法,我不关心它是过程性的还是对象性的。强烈建议使用准备好的语句,因此请原谅我没有向您指

我一直在开发我的第一个大型网站,在尝试创建一个PHP函数时遇到了一个问题,该函数根据调用函数时给定的条件返回一个值

我在使用下面的代码时遇到了问题,我只能返回“DATABASE:1”

在搜索了一段时间后,我似乎发现了一个问题,即所有SQL查询都返回一个数组而不是一个字符串(我相信情况就是这样,如果我错了,很抱歉)

我原以为返回一个结果会很容易,但事实似乎并非如此


因此,基本上我想要一种从这个函数返回单个结果的方法,我不关心它是过程性的还是对象性的。

强烈建议使用准备好的语句,因此请原谅我没有向您指出,而是向您展示了如何安全地执行此操作:

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;
}

$return
未定义,并且您的查询无效,可以接受SQL注入。字符串需要被引用。一旦查询正常,使用fetch
$result
并将其设置为
$return
。另外,
或die()
也没什么用,在那里输出一些东西,这样你就知道它为什么死了,或者使用错误报告功能来获取信息。阅读关于mysqli_query()的$result type的手册-是的,返回是我这边的一个错误,因为我删除了一些项目,所以它关注的是问题所在。现在已修复。
$sqli
仍然是无效查询,因此您将导致
死亡
。请参阅注释的其余部分。警告:当使用
mysqli
时,您应该使用和将用户数据添加到查询中。不要使用字符串插值或串联来完成此操作,因为您已经创建了严重的错误。千万不要把
$\u POST
$\u GET
数据直接放到查询中,如果有人试图利用你的错误,这可能是非常有害的。啊,我把重点放在
$username
上,并在专栏上空白。我会更新的。像这样的白名单是更安全的方法。回答得好。
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;
}