2017-01-01 16 views
0

1つのクエリを使用して、テキスト入力ボックスに入力されたユーザー名に関連するユーザーIDを検索しようとしています。次に、前のクエリで見つけたユーザーIDを使用して、同じデータベース内の別のテーブルから詳細を選択しようとしています。私はこれをしようとすると、しかし、私はエラーを取得する:別のクエリ(PHP)で1つのSQLクエリの結果を使用する方法

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:私は本当のエラーメッセージのポイントこれに行番号22を取る

<?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(); 
?> 
+0

この投稿は参考になりましたか? http://stackoverflow.com/questions/21722375/object-of-class-mysqli-result-could-not-be-converted-to-string-in – Tina

答えて

0

場合、私はfinduseridを要求するクエリが問題であることを前提としています。 SELECTクエリのmysqli_queryは、mysqli_resultオブジェクトを返します。これはイテレータであり、 "単純な"値ではありません(cf. 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']; 
... 
+0

エコーでは出力できないと思います文字列ですが、1つにする方法を理解できません –

+0

データベースで直接クエリを試しましたか?それはちょうど1つの値を返しますか? –

+0

ウェブサイトからの情報が必要な場合、データベースでクエリを実行するにはどうすればよいですか? –

0

あなたが好きなら、あなたにも同じ効果に単一のクエリを書くことができ:

$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 
     "; 

"climbs"の特定の列名をSELECTステートメントに含めることをお勧めします。特定の列名が「climbs」と「users」の両方の表に表示される場合は、表名(または別名:c.userlogged、u.user_idなど)を前に付けて区別する必要があります。 。

関連する問題