Базовый поиск с использованием предложений WHERE mysql_query и mysql_fetch_array - PullRequest
0 голосов
/ 18 февраля 2012

Я довольно новичок в PHP и mysql, и мне было интересно, могу ли я получить некоторую помощь с моим кодом для поиска в моей базе данных и возврата результатов.</p> <pre><code><?php $con = mysql_connect("localhost", "root", ""); if (!$con) { die ("could not connect to db"); } if (!mysql_select_db("site", $con)) { die ("Could not connect to table"); } $search = $_POST["text"]; $result = mysql_query("SELECT * FROM torrents WHERE name ='$search'"); //or LIKE instead of = while($row = mysql_fetch_array($result, MYSQL_ASSOC)){ echo $row['name']; } ?>

Любая помощь приветствуется.Прямо сейчас код работает без ошибок, но не имеет вывода.открыт для всех изменений и советов.

Ответы [ 4 ]

1 голос
/ 18 февраля 2012

три вещи, чтобы начать с

  • Никогда не подключайтесь к mysql db, используя root в качестве имени пользователя
  • $ Поиск должен фильтроваться с возможными SQL-инъекциями, поэтому используйте mysql_real_escape_string, чтобы защитить себя от SQLinjection
  • в-третьих, попробуйте напечатать ваш запрос перед его выполнением, чтобы вы знали, какие значения передаются в вашем запросе.или используйте функцию trigger_error, чтобы увидеть, есть ли какие-либо ошибки в вашем запросе

, поэтому строка вашего кода может быть переписана как

 $search = mysql_real_escape_string($search); 
 $result = mysql_query("SELECT * FROM torrents WHERE name LIKE '%$search%'") or trigger_error(mysql_error());

Это даст вам представление очто происходит

1 голос
/ 18 февраля 2012

Добавьте mysql_error() и проверьте, есть ли ошибка в запросе.

$result = mysql_query("SELECT * FROM torrents WHERE name ='$search'")
          or trigger_error(mysql_error());

Если запрос выполнен успешно, возможно, таблица не имеет подходящей строки.

Если вам не нужно точное совпадение и требуется близкое совпадение, вы можете использовать LIKEпредложение вместо =

$result = mysql_query("SELECT * FROM torrents WHERE name LIKE '%$search%'")
              or trigger_error(mysql_error());

Последнее, но не в последнюю очередь экранирование строки с функцией mysql_real_escape_string перед добавлением их в запрос SQL.

0 голосов
/ 18 февраля 2012

, хотя Click уже прибил проблему "работает без ошибок", вот ваш код с некоторыми улучшениями.

<?php
mysql_connect("localhost", "root", "");
mysql_select_db("site"));

if (isset($_GET["text"])) { // you have to use GET method for the search
    $search = mysql_real_escape_string($_GET["text"]); // an essential thing
    $query  = "SELECT * FROM torrents WHERE name LIKE '%$search%'";
    $result = mysql_query($query) or trigger_error(mysql_error()." ".$query);
    while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
        echo $row['name']; 
    }
}
0 голосов
/ 18 февраля 2012
  1. Используйте WHERE name LIKE '%$search%'
  2. Используйте поиск по полному индексу (с версии 5.6 он работает только на движке MyISAM) для ускорения поисковых запросов вместо LIKE. MySql Manual
  3. Google для SQLInjection.
  4. Используйте объектно-ориентированный драйвер, например PDO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...