Мне нужно создать поиск SQL с помощью переполнения стека

Я искал учебники и примеры, но я не мог понять, как найти поля в базе данных.
Может ли кто-нибудь проверить, все ли в порядке, что я сделал? Спасибо.

Подключение к базе данных

public function __construct($db)
{
//conexion
$connection = @mysql_connect('localhost', 'root','','noticias') or die('Connection error -> ' . mysql_error());
mysql_select_db("noticias", $connection) or die('Database error -> ' . mysql_error());
}

Мне нужно найти по идентификатору

public function find($id)
{$usuario = mysqli_query($connection, 'SELECT usuario FROM noticia WHERE id ='.$id);
$result=mysqli_query($connection, "SELECT * from noticia WHERE id =".$id);

while ($row=mysqli_fetch_array($result))
{
$noticia->setTitulo("titulo");
$noticia->setCuerpo("cuerpo");
$noticia->setUsuario($usuario);
}
}

Итак, я изменяю код и добавляю класс, чтобы было понятнее.

class NoticiaRepository
{

public function __construct($db)
{
//conexion
$connection = @mysqli_connect('localhost', 'root','','noticias') or die('Connection error -> ' . mysqli_error($connection));
}public function find($id)
{
$this->connection = $connection;

$usuario = mysqli_query($connection, 'SELECT usuario FROM noticia WHERE id ='.$id);
$result=mysqli_query($connection, "SELECT * from noticia WHERE id =".$id);

while ($row=mysqli_fetch_array($result))
{
$noticia->setTitulo($row["titulo"]);
$noticia->setCuerpo($row["cuerpo"]);
$noticia->setUsuario($row[$usuario]);
}
}

}

$ noticiasRepository = new NoticiasRepository ();
$ noticias = $ noticiasRepository-> find ($ id);

    //print_r($noticias);

0

Решение

В вашем коде много неправильного. Я предполагаю, что NoticiasRepository это класс, к которому вам нужно установить различные значения, которые вы получаете от find функция.

Вместо того, чтобы просто переписать всю функцию для вас, я просто указываю, где есть все проблемы, чтобы вы могли прочитать и выяснить, как это исправить самостоятельно — нет ничего лучше, чем практическое обучение 🙂

$usuario = mysqli_query($connection, 'SELECT usuario FROM noticia WHERE id ='.$id);

Результатом mysqli_query функция resultset, Затем вам нужно извлечь значения из этого набора результатов, используя такие функции, как mysqli_fetch_array, mysqli_fetch_row или же mysqli_fetch_assoc, Как только вы это сделаете, вы получите необходимые значения. Именно эти значения вам нужно передать функциям.

Другими словами:

$noticia->setTitulo("titulo");

было бы что-то вроде

$noticia->setTitulo($row["titulo"]);

И это потому, что вы сделали следующее:

 $result=mysqli_query($connection, "SELECT * from noticia WHERE id =".$id);
//above code takes the result of your query and puts it in variable $query

while ($row=mysqli_fetch_array($result)) { ...
//you loop this $result variable and fetch each row into an array named $row
//so titulo is accessible as $row[titulo]

Также проверьте, что сказал @ bridge45, ваша переменная $ connection действительно не будет иметь никакого эффекта, как она используется в настоящее время.


Редактировать:

Вы смешиваете MySQL API, используя mysql_ а также mysqli_ функции.

Эти разные API не смешиваются вместе.

Поэтому вы должны изменить следующее:

$connection = @mysql_connect('localhost', 'root','','noticias')  or die('Connection error -> ' . mysql_error());
mysql_select_db("noticias", $connection) or die('Database error -> ' . mysql_error());

чтобы:

$connection = @mysqli_connect('localhost', 'root','','noticias') or die('Connection error -> ' . mysqli_error($connection));

так как вы уже используете 4-й параметр для вашей БД noticias,

Вы также должны добавить or die(mysqli_error($connection)) в mysqli_query() чтобы ловить ошибки.

1

Другие решения

Вы должны изменить ‘$ connection’ на $ this-> connection! Я думаю, все будет хорошо! Может быть, вы можете попробовать это!

0

По вопросам рекламы [email protected]