簡體   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