如何在另一个查询中使用一个SQL查询的结果(PHP)

时间:2017-01-01 21:26:41

标签: php html sql object mysqli

我正在尝试使用一个查询来查找与在文本输入框中输入的用户名相关的用户ID。然后我尝试使用我在上一个查询中找到的用户ID从同一数据库中的另一个表中选择详细信息。但是,当我尝试这个时,我得到错误:

Catchable fatal error: Object of class mysqli_result could not be converted to string in /home/jack/public_html/viewfriendlogbook.php on line 22

我认为这是因为我尝试使用的变量实际上是一个对象而不是整数,但我不知道如何解决这个问题。任何帮助将不胜感激。

我的PHP:

<?php

SESSION_START(); 


$servername = "localhost";
$username = "MY USERNAME";
$password = "MY PASSWORD";
$dbname = "MY DATABASE NAME";

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$user= $_POST['textinput'];

$finduserid = "SELECT `user-id` FROM `users` WHERE `username` = $user";
$requesteduserid = mysqli_query($conn,$finduserid); 

echo $requesteduserid ;

$sql = "SELECT * FROM `climbs` WHERE `userlogged` = '$requesteduserid'";
$result = mysqli_query($conn,$sql);

echo '<style>

table, th, td {
    border: 1px solid black;
}

</style>';

if ($result->num_rows > 0) {
     echo "<table><tr><th>Climb</th><th>Crag</th><th>Grade</th>    <th>Description</th></tr>";
     // output data of each row
     while($row = $result->fetch_assoc()) {
         echo "<tr><td>" . $row["climbname"]. "</td><td>" .     $row["cragname"]. "</td><td> " . $row["grade"]. "</td><td>" .     $row["description"]. "</td></tr>";
     }
     echo "</table>";
} else {
     echo "0 results";
}


$conn->close();
?>

2 个答案:

答案 0 :(得分:0)

如果我将错误消息指向的行号22变为真实,那么我假设您的查询请求finduserid是问题所在。 请注意mysqli_query的{​​{1}} - 查询返回一个SELECT - 对象,它是一个迭代器,而不是一个简单的&#34;价值(参见php mysqli::query-reference)。 所以下面的代码应该可以解决你的问题:

mysqli_result

答案 1 :(得分:0)

如果您愿意,您也可以将同一个查询写成相同的效果:

$sql = "SELECT c.* FROM climbs c
                   INNER JOIN users u 
               ON c.userlogged = u.user_id 
               AND u.username  = $user
       ";

或者...

{{1}}

建议在SELECT语句中包含“climbs”中的特定列名。如果某个列名称同时出现在“climbs”和“users”表中,则必须通过在表名前加上表名(或别名;例如:c.userlogged,u.user_id等)来区分它们。