繁体   English   中英

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

[英]How to use the result of one SQL query in another query (PHP)

我正在尝试使用一个查询来查找与在文本输入框中输入的用户名相关的用户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();
?>

如果我参加了行号22为真正的错误信息点,那么我想这是你的查询请求finduserid的问题。 请注意,用于SELECT -queries的mysqli_query返回mysqli_result ,它是一个迭代器,而不是“简单”值(请参阅php mysqli :: query-reference )。 因此,以下代码可以解决您的问题:

$finduserid = "SELECT `user-id` FROM `users` WHERE `username` = '$user'";
$requesteduserid = mysqli_query($conn,$finduserid); 
$row = mysqli_fetch_row($requesteduserid);
$userid = $row['user-id'];
...

如果愿意,您也可以编写一个查询来达到相同的效果:

$sql = "SELECT * FROM climbs 
                 WHERE userlogged = (SELECT user_id FROM users WHERE username = $user)
       ";

要么...

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM