Tüm tabloyu ara?

7 Cevap php

Ben aşağıdaki arama komut yapmış ancak veritabanı sorgulama yalnızca bir tablo sütunu arama yapabilirsiniz:

$query = "select * from explore where site_name like '%".$searchterm."%'";

Ben (keşfetmek) tüm tabloyu arama nasıl bilmek istiyorum. Ayrıca, bu kod satırı düzeltmek gerekir:

echo "$num_found. ".($row['site_name'])." <br />";

Ben her mesajı görüntüleyen farklı bir sayfaya gönderme tuşuna bastığınızda beni adamcağız son bir şeydir "bir arama terimi girin." Bir şeye girmek bile?

Herhangi bir yardım için teşekkürler, burada gerekirse tüm betik:

<?php
// Set variables from form.
$searchterm  = $_POST['searchterm'];
trim ($searchterm);

// Check if search term was entered.
if (!$serachterm)
{
    echo "Please enter a search term.";
}
// Add slashes to search term.
if (!get_magic_quotes_gpc())
{
    $searchterm = addcslashes($searchterm);
}

// Connects to database.
@ $dbconn = new mysqli('localhost', 'root', 'root', 'ajax_demo');
if (mysqli_connect_errno())
{
    echo "Could not connect to database. Please try again later.";
    exit;
}
// Query the database.
$query = "select * from explore where site_name like '%".$searchterm."%'";
$result = $dbconn->query($query);

// Number of rows found.
$num_results = $result->num_rows;
echo "Found: ".$num_results."</p>";

// Loops through results.
for ($i=0; $i <$num_results; $i++)
{
    $num_found = $i + 1;
    $row = $result->fetch_assoc();
    echo "$num_found. ".($row['site_name'])." <br />";
}

// Escape database.
$result->free();
$dbconn->close();
?>

7 Cevap

Diğer yanıtlar aksine, ben kullanmak "VEYA" senin sorguda değil, "VE" istiyorum düşünüyorum:

$query = "select * from explore where site_name like '%".$searchterm."%' or other_column like '%".$searchterm."%'";

Bir ikinci sütunun adı ile other_column olarak değiştirin. Ben senin sütunların her biri için ilave bir kısmını tekrar devam edebilirsiniz.

Ben her mesajı görüntüleyen farklı bir sayfaya gönderme tuşuna bastığınızda beni adamcağız son bir şeydir "bir arama terimi girin." Bir şeye girmek bile?

Bu ilgili - iki formları aynı method (sizin örnekte yazı) kullandığınızdan emin olun. <form> etiketi özniteliği method="post" olmalıdır.

Ayrıca, ne sözü kod satırı ile yanlış? Bir hata var mı? Bu kadar söyleyebilirim çalışmalıdır.

Tablonun diğer sütunları aramak için size sql için koşullar eklemeniz gerekir

$query = "select * from explore where site_name like '%".$searchterm."%' or other_column like '%".$searchterm."%'";

Ama ben kesinlikle bazı sql öğretici geçiyor tavsiye olacağını bilmiyorum ...

Ayrıca ben bu hat ile yanlış bir şey görmedim

echo "$num_found. ".($row['site_name'])." <br />";

Ne hata mesajı alıyorsanız?

Sadece eklemek 'AND kolon = "durum"' Lütfen sorgunun WHERE yan tümcesine.

Bu özellikle bir ön vahşi kart kullanarak çok yavaş olabilir gibi GİBİ% koşulları birçok ekleyerek dikkatli olun. Bu RDBMS her satır aramasına neden olur. Eğer sütun ve tek bir firar joker üzerinde bir dizin kullanmak eğer optimize edebilirsiniz.

Sadece nerede site_name like '%".$searchterm."%' edilenlere sonuçları sınırlama, tüm tabloyu arıyor. Eğer bu tablo her şeyi aramak istiyorsanız, WHERE yan tümcesi kaldırmak gerekir

İşte düzeltilmiş çizgi. Bunu da birkaç çok tırnak vardı.

echo $num_found.".".($row['site_name'])." <br />";

Mesajı görüntüleyerek ilgili olarak, kodunuzda bir yazım hatası var:

// Check if search term was entered.
if (!$serachterm)

olmalıdır:

// Check if search term was entered.
if (!$searchterm)

Bir değişkeni $seracherm (yazım hatası not) ilan asla çünkü yazdım kodda, !$serachterm her zaman true değerlendirir.

your code is very bugy for sql injection first do do this

$searchterm = htmlspecialchars($searchterm);
trim($searchterm);

next

$query = mysql_real_escape_string($query);

finaly your search looks like this

$query = "select * from explore where site_name like '%$searchterm%';

A UNION sorgusu sadece OR kullanarak daha optimize bir şekilde sonuçlar verecektir. LIKE böyle bir şekilde kullanarak size masanın üzerinde olabilecek herhangi bir dizin kullanmak için izin vermez unutmayın. Birkaç olası sonuçları kaybetme pahasına bir daha optimize sorgu sağlamak için aşağıdakileri kullanabilirsiniz:

$query = "SELECT * FROM explore WHERE site_name LIKE '".$searchterm."%'
          UNION
          SELECT * FROM explore WHERE other_field LIKE '".$searchterm."%'
          UNION
          SELECT * FROM explore WHERE third_field LIKE '".$searchterm."%'";

Eğer FULLTEXT arama kullanmadan almak için gidiyoruz gibi bu sorgu hızlı muhtemelen. Dezavantajı, ancak, that you can only match strings beginning with the searchterm.