Поиск в базе данных MySQL с оператором LIKE
Мне нужно вернуть результаты поиска пользователей в моей базе данных.
На данный момент мне удалось использовать функцию LIKE в запросе MySQL, чтобы вернуть счетчик результатов, но мне нужно, чтобы он отображал имена пользователей всех результатов, а не только первый результат:
<?php
// mysql details
$host="localhost"; // Host name
$username="classified"; // Mysql username
$password="classified"; // Mysql password
$db_name="jaycraftcommunity"; // Database name
$tbl_name="members"; // Table name
// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
// form variable to local
$search = $_POST['username'];
// make query
//$sql = "SELECT * FROM $tbl_name WHERE (username='$search' OR verified='$search')"; // sql query
$sql = "SELECT username FROM $tbl_name WHERE username LIKE '%$search%'"; // sql query
$result = mysql_query($sql); // do query
// handle query data
$count = mysql_num_rows($result);
$row = mysql_fetch_row($result);
$array = mysql_fetch_array($result);
echo $count;
foreach( $row as $arrays ): ?>
<tr>
<td><?php echo htmlspecialchars( $arrays ); ?></td>
<br />
</tr>
<?php
endforeach;
?>
HTML-форма выглядит так:
<h2>Search</h2>
<form method="post" action="search_engine.php">
Search for:
<input type="text" name="username">
<input type="submit" value="Search for username">
</form>
На данный момент, если вы перейдете по http://dev.jaycraft.co/player/dupe/search.php вы сможете увидеть его в действии. Поиск отдельных букв, он показывает, сколько результатов с echo $count, но только повторяет первый результат.
Спасибо
3 ответа
Каждый звонок mysql_fetch_row($result)
вернет другую строку и переместит курсор. Вам просто нужно использовать while(), чтобы перебрать все строки в результате:
while($row = mysql_fetch_row($result)) {
echo $row[0];
}}
Для простоты использования лучше использовать mysql_fetch_assoc($result);
который вернет ассоциативный массив:
while($row = mysql_fetch_assoc($result)) {
echo $row['username'];
}}
Вы можете
<?php
$sql = mysql_query($sql);
while($row = mysql_fetch_assoc($sql)){
echo $row['username'].'<br />';
}
?>
Но, пожалуйста, используйте mysqli вместо mysql! http://www.php.net/manual/en/book.mysqli.php
Когда вы используете строку подготовки, вышеуказанные решения не работают, поскольку символ замены совпадает с аналогичным символом. Попробуйте сделать параметр поиска в файле prepare, предварительно отформатировав его как строку. Затем просто прокрутите доступные строки с помощью цикла foreach или for.
$Table_Name = $wpdb->prefix.'tablename';
$SearchField = '%'. $YourVariable . '%';
$sql_query = $wpdb->prepare("SELECT * FROM $Table_Name WHERE ColumnName LIKE %s", $SearchField) ;
$rows = $wpdb->get_results($sql_query, ARRAY_A);
if(!empty($rows))
{
$TotalRows = $wpdb->num_rows;
foreach($rows as $row)
{
echo $row['field name'];
}
}
Вам нужен цикл while для ваших строк:
while($row = mysql_fetch_array($result){
foreach( $row as $cell): ?>
<tr>
<td><?php echo htmlspecialchars( $cell); ?></td>
<br />
</tr>
<?php
endforeach;
?>
}
mysql_fetch_row
а также mysql_fetch_array
являются почти уникальными функциями, они обе получают следующую строку из набора результатов. вы могли бы использовать mysql_fetch_assoc
чтобы получить значения с ключом в качестве имени столбца базы данных. (это рекомендуется)