我已经被困在这个问题上差不多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新手。
答案 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'];