#php #mysql
#php #mysql
Вопрос:
Я пытаюсь создать простую дружественную систему с PHP и MYSQL, и я не знаю, возможно ли вообще получить данные использования из другой таблицы, используя только их id. Кстати, я очень новичок, поэтому не очень хорошо знаю язык 🙂 Любая помощь была бы очень ценна
<?php if(count($friend_request) > 0): ?>
<?php foreach ($friend_request as $friend_request): ?>
<?php
try{
$statement = $db->query("SELECT * FROM users WHERE id = '$friend_request['id']' ");
$user_info = $statement->fetchAll(PDO::FETCH_ASSOC);
}catch (PDOException $ex){
$user_info = flashMessage("An error occurred: " .$ex->getMessage());
}
?>
<?=$friend_request['id'] ?>
<?=$friend_request['user_requested'] ?>
<?=$friend_request['user_to'] ?>
<?=$friend_request['request_date'] ?>
<?php endforeach; ?>
<?php else: ?>
<center>
<input id="emailInput" type="text" name="requestEmail" placeholder="someonesemail@bruh.com">
</center>
<?php endif; ?>
Комментарии:
1. Вы нигде не используете
$user_info
.2. Также код выглядит подверженным SQL-инъекциям первого (прямого) или SQL-инъекциям второго порядка (хранимым).
3. если
$friend_request
это результат другого запроса, вам следует просто объединить два запроса вместо запроса внутри цикла.4. да, я знаю, но я пытаюсь получить $friend_request[‘id’] в запросе mysql
5. Если между строками PHP нет HTML-кода, вам не нужно использовать
<?php and ?>
в каждой строке, если вам не нравится нечитаемый код
Ответ №1:
Вам нужно использовать фигурный синтаксис, если вы хотите поместить строку в кавычках в индекс переменной внутри строки.
$statement = $db->query("SELECT * FROM users WHERE id = '{$friend_request['id']}' ");
Вы также можете исключить кавычки из индекса, но это не мое предпочтение.
Но было бы лучше использовать подготовленную инструкцию.
<?php
if(count($friend_request) > 0):
$statement = $db->prepare("SELECT * FROM users WHERE id = :id ");
foreach ($friend_request as $friend_request):
try{
$statement->execute([':id' => $friend_request['id']]);
$user_info = $statement->fetchAll(PDO::FETCH_ASSOC);
}catch (PDOException $ex){
$user_info = flashMessage("An error occurred: " .$ex->getMessage());
}
?>
<?=$friend_request['id'] ?>
<?=$friend_request['user_requested'] ?>
<?=$friend_request['user_to'] ?>
<?=$friend_request['request_date'] ?>
<?php endforeach; ?>
<?php else: ?>
<center>
<input id="emailInput" type="text" name="requestEmail" placeholder="someonesemail@bruh.com">
</center>
<?php endif; ?>
Комментарии:
1. Или
$db->query("SELECT * FROM users WHERE id = '$friend_request[id]'");
2. Да, я пытаюсь игнорировать этот случай, я считаю это странной аномалией.
Ответ №2:
Я предполагаю, что ваш идентификатор числовой, передайте значение в новый var, например, $id = friend_request['id'];
тогда ваш запрос может быть "SELECT * FROM users WHERE id = $id LIMIT 1"
без » ‘», «ограничение 1» предназначено для производительности, а выборку, которую вам нужно использовать, просто извлеките больше информации здесь, чтобы получить только строку, $statement->fetch(PDO::FETCH_ASSOC);
позже вы можете распечатать или использовать массив $ user_info для того, что вам нужно напрямую.
Комментарии:
1. Вот диграмма, которую я только что сделал, я надеюсь, это поможет с тем, что я пытаюсь сказать? imgur.com/QV0WU8D
2. это простое объединение, подобное
SELECT a.username FROM users AS a LEFT JOIN friend_requests AS b ON b.user_id = a.id WHERE a.id = $id
в части выбора вы можете получить любой нужный вам столбец с псевдонимами a или b и именем поля 🙂