#php #mysql
Вопрос:
В базе данных столбец состояния может иметь два значения: друг и ожидание. Я хочу отобразить надпись друг, если человек мой друг, надпись ждет, если я жду ответа, и надпись добавить, если у меня его нет в друзьях. Я создал функцию для этого, но она ничего не показывает.
public function status()
{
$id = $_GET['id'];
$session = $_SESSION['id'];
$sql = $this->database->connect()->prepare("SELECT status FROM user JOIN friend ON user.id = friend.request_from_id where request_to_id = :id and request_from_id = :session OR request_to_id = :session and request_from_id = :id");
$sql->bindParam(':session',$id, PDO::PARAM_INT);
$sql->bindParam(':id',$session, PDO::PARAM_INT);
$sql->execute();
if($sql->rowCount())
{
$row = $sql->fetch();
if($row['status']== 'friend']
{
return 'friend';
}
else if($row['status']=='waiting')
{
return 'Waiting';
}
}
else if(!($id != $session))
{
return 'This is me';
}
else
return 'Add to friend';
}
Комментарии:
1. В случае, когда статус не является ни «другом», ни «ожиданием» (возможно ли значение NULL?), эта функция не вернет значение.
2. Возможно, так и должно быть, но этого не произойдет 🙂 Если есть строки, но значение status не является ни одной из них, возвращаемое значение по умолчанию не указывается.
3. Это мелочь, но в вашем SQL вы смешиваете
AND
, иOR
это предполагает приоритет оператора. Это совершенно нормально, пока вы это запомнили (я знаю, что нет), но я бы рекомендовал использовать круглые скобки, чтобы избежать какой-либо двусмысленности для всех, кому нужно прочитать этот код.4. Отладка-жизненно важный навык для программиста. Это так же важно, как и умение писать код. Вы должны изучать его в то же время. Как вы ожидаете когда-либо устранить какие-либо проблемы в своем коде, если вы не можете выполнить базовые тесты на нем? Вот руководство для начинающих: phpknowhow.com/basics/basic-debugging . Ваша цель должна состоять в том, чтобы определить, по какому пути движется код, и каковы значения значимых переменных, которые могут на это повлиять.
5. @ChrisHaas FWIW, я не думаю, что это мелочь. Мне кажется, это довольно-таки важно!