2017-01-01 6 views
0

Я пытаюсь использовать один запрос, чтобы найти идентификатор пользователя, связанный с именем пользователя, введенным в текстовое поле ввода. Затем я пытаюсь выбрать детали из другой таблицы в той же базе данных, используя идентификатор пользователя, который я нашел в предыдущем запросе. Однако, когда я пытаюсь это я получаю сообщение об ошибке:Как использовать результат одного SQL-запроса в другом запросе (PHP)

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

Это сообщение могло бы помочь? http://stackoverflow.com/questions/21722375/object-of-class-mysqli-result-could-not-be-converted-to-string-in – Tina

ответ

0

Если я номер строки 22, на который указывает сообщение об ошибке для реальной, то я полагаю, что ваш запрос с просьбой о finduserid является проблемой. Обратите внимание, что mysqli_query для SELECT -queries возвращает 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']; 
... 
+0

Я думаю, что он не может выводить его в эхо, потому что это не строка, но я не могу понять, как сделать ее одним –

+0

Вы пробовали запрос непосредственно в базе данных? он возвращает ровно одно значение? –

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

Было бы целесообразно включить в оператор SELECT конкретные имена столбцов из «подъемов». Если в обеих таблицах «взбирается» и «пользователи» появляется определенное имя столбца, то их следует отличать, предшествуя им именем таблицы (или псевдонимом, например: c.userlogged, u.user_id и т. Д.), ,

Смежные вопросы