Mysqli结果字符串转换问题

时间:2014-07-12 05:42:30

标签: php mysql sql

我已经被困在这个问题上差不多10个小时了,我真的不明白问题是什么。我一直得到类mysqli_result的对象无法转换为字符串' LINE 21上的错误(在代码中显示)。我已经删除了剩下的代码,因为我需要的所有变量都是根据另一个Stack Overflow问题制作的。

function getData() {
    $db_con = mysqli_connect("localhost","root","pass","website_alp");
    //Username entered on a form
    $f_username = $_POST['name'];
    //Password entered on a form
    $f_pass = strip_tags(md5($_POST['pass']));
    //Id number of user
    $idno = mysqli_query($db_con,"SELECT id FROM userbase WHERE username = '".$f_username. "' AND pass = '".$f_pass. "'") ;
    //PROBLEM IS THIS LINE
    $query = mysqli_query($db_con,"SELECT profile_pic FROM userdata WHERE id = ".$idno."");
    //Loop 
    $result = array();
    while($row = mysqli_fetch_row($result)) {$result['profile_pic'] = $row[0];
    mysqli_free_result($result);}
}

任何帮助都会非常感激,因为我是PHP新手。

2 个答案:

答案 0 :(得分:1)

mysqli_query没有返回列的内容,您必须在结果上调用mysqli_fetch_XXX函数。此外,无需进行两次查询,使用JOIN的一个查询:

$f_username = mysqli_real_escape_string($db_con, $_POST['name']);
$f_pass = md5($_POST['pass']);
$qres = mysqli_query($db_con, "SELECT profile_pic
                               FROM userdata d
                               JOIN userbase b ON d.id = u.id
                               WHERE username = '$f_username'
                               AND pass = '$f_pass'") or die(mysqli_error($db_con));
$result = array();
if ($row = mysqli_fetch_assoc($qres)) {
    $result['profile_pic'] = $row['profile_pic'];
}

没有必要在strip_tags的结果上调用md5 - 它只返回一个十六进制字符串,其中没有HTML标记。但是你确实需要转义用户名以防止SQL注入(最好使用准备好的查询,但我并不觉得你的代码会做那么多的重写)。

如果查询只返回1行,则不需要使用while循环来获取它。

答案 1 :(得分:0)

  

mysqli_query()会将对象资源返回到您的$idno变量,而非字符串。

试试这个

$idno = mysqli_query($db_con,"SELECT id FROM userbase WHERE username = '".$f_username. "' AND pass = '".$f_pass. "'") ;
$row = $idno->fetch_assoc();
echo $row['id'];