PHP, Mysqli, SQL-запрос для получения значения и отображения других

0

Я пытаюсь сделать что-то довольно сложное, но я надеюсь, что это имеет смысл в тексте.

Итак, у меня есть ссылка на странице, которая post.php?postid=3 меня post.php?postid=3

В моей базе данных есть поле aa, которое является целым числом, называемым camp_id. Когда, например, я нахожусь в столбце с полем camp_id со значением 1, я хочу отобразить все в таблице, которая имеет значение 1 в этом поле.

Если я изменил URL-адрес post.php?postid=2 и у этого сообщения есть camp_id скажем 4, я бы отобразил список всего, у которого есть camp_id из 4.

В любом случае здесь приведен код ниже и текущая ошибка внизу.

Вот моя функция:

public function getartfromcamp($campid)
{
    $con = $this->db->OpenCon();
    $campid = $con->real_escape_string($campid);

    $stmt = "SELECT * from post WHERE camp_id = '$campid'";

    $relatedlinks = $con->query($stmt);

    if ($relatedlinks->num_rows > 1) {
        $sql = $relatedlinks;
    } else {
        $sql = "No article";
        echo "";

    }

    $this->db->CloseCon();

    return $sql;
}

Вот код на странице:

include 'postclass.php';

$postid = $_GET['postid'];

$article = new Post();
$relatedlinks  = $article->getartfromcamp($postid);


?>
<div class='row'>
<?php
while ($row = $relatedlinks->fetch_assoc()) {
  ?>
<ul>
<ul>
<li><a href="postview.php?postid=<?php echo $row['article_id'];?>"><?php echo $row['article_name'];?></a></li>
</ul>

Кажется, что он работает с postid = 1, но когда я меняю его на что-то еще, я получаю ошибку ниже:

Неустранимая ошибка: Непринятая ошибка: вызов функции-члена fetch_assoc() в строке в C:\inetpub\wwwroot\local.test.co.uk\blog-example\camp1.php: 18 Трассировка стека: # 0 {main} throw в C:\inetpub\wwwroot\local.test.co.uk\blog-example\camp1.php в строке 18

Строка: 18:

while ($row = $relatedlinks->fetch_assoc()) {
  • 0
    В функции getartfromcamp вы возвращаете строку $ sql вместо ссылки db, когда результат отсутствует. В этом конкретном случае результат не приходит, поэтому строка возвращается. Так что он выдает ошибку, когда вы пытаетесь запустить fetch_assoc для строки
  • 1
    : «Похоже, что вы пишете свой собственный ORM. Рассматривали ли вы использовать тот, который уже написан, протестирован и широко поддерживается как RedBeanPHP , Doctrine , Propel или Eloquent
Показать ещё 1 комментарий
Теги:
mysqli

1 ответ

2

В функции getartfromcamp вы возвращаете $sql string вместо объекта соединения, когда результата нет.

В этом конкретном случае результат не приходит, поэтому возвращается строка. Поэтому он выдает ошибку, поскольку вы пытаетесь запустить fetch_assoc в строке. Вы должны позволить функции возвращать объект соединения, даже если нет возвращаемых строк.

Перейдите к следующему:

public function getartfromcamp($campid)
{
    $con = $this->db->OpenCon();
    $campid = $con->real_escape_string($campid);

    $stmt = "SELECT * from post WHERE camp_id = '$campid'";

    $relatedlinks = $con->query($stmt);

    $this->db->CloseCon();

    return $relatedlinks;
}

SideNote: вы должны переключиться на Подготовленные утверждения, чтобы предотвратить проблемы, связанные с SQL-инъекциями.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню