2013-10-28 6 views
0

Я пытаюсь создать поиск для своего сайта, и у меня много проблем с этим. В моей базе данных movies у меня есть две таблицы: movieinfo и movie_genres. Под movieinfo находится Movie_Name, actor1, actor2, actor3, actor4. Под столом movie_genres находится Genre_Id. (Есть несколько столбцов в каждой из таблиц, но я только хочу, чтобы искать эти столбцы.)Поиск нескольких таблиц

Мой текущий код:

<?php 
if ($_GET) { 
    $search = $_GET['search']; 
    $connect = mysql_connect("localhost","root","spencer"); 
    if($connect) { 
     mysql_select_db("movies", $connect); 

     $query = "SELECT Movie_Name, actor1, actor1, actor1, actor1, Genre_Id FROM movieinfo, movie_genres WHERE * LIKE '%:search%' OR actor1 LIKE '%:search%' OR actor2 LIKE '%:search%' OR actor3 LIKE '%:search%' OR actor4 LIKE '%:search%' OR Genre_Id = ? "; 

     $results = mysql_query($query); 
     while($row = mysql_fetch_array($results)) { 
      echo $row['Poster'] . "<br/>" . $row['Movie_Name']; 
     } 
    } else { 
     die(mysql_error()); 
    } 
} 
?> 

Все в movieinfo Я ищу это VARCHAR и movie_genres это INT (это может сильно повлиять). Я думаю, что я близок к тому, что должен делать код, но я не знаю.

Как прямо сейчас, я получаю следующее сообщение об ошибке при попытке поиска:

Warning: mysql_fetch_array() ожидает параметр 1, чтобы быть ресурсом, логический дан в C: \ XAMPP \ HTDOCS \ фильмы \ get_search .php на линии 12

Новый код:

<?php 
// Connection data (server_address, database, name, poassword) 
$hostdb = 'localhost'; 
$namedb = 'movies'; 
$userdb = 'root'; 
$passdb = 'spencer'; 

try { 
    // Connect and create the PDO object 
    $conn = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb); 
    $conn->exec("SET CHARACTER SET utf8");  // Sets encoding UTF-8 
} 
catch (PDOException $e) { 
    $v_errormsg = $e->getMessage(); 
    $error_str = <<<END_HTML 
      <h2> Error connecting to database: Message: $v_errormsg <h2> 
    END_HTML; 
    echo $error_str; 
    die; 
} 

$sql = <<<END_SQL 
    SELECT Movie_Name FROM movieinfo WHERE Movie_Name LIKE '%":search"%' "; 
END_SQL; 
try { 
    $sth = $conn->prepare($sql); 
    $sth->execute(); 
} 
catch (PDOException $e) { 
    $v_errormsg = $e->getMessage(); 
    $error_str = <<<END_HTML 
     <h2> Error selecting data: Message: $v_errormsg <h2> 
    END_HTML; 
    echo $error_str; 
    die; 
} 

$num_rows = 0; 
while ($row = $sth->fetch(PDO::FETCH_ASSOC)) { 
    $Movie_Name = $row['Movie_Name']; 
} 

echo $row['Movie_Name'];   
?> 
+0

В какой таблице находится «Плакат»? Вы не включили это в свой вопрос, но вы сделали упоминание о 'Movie_Name' –

+0

. Я подозреваю, что вы оставили« Poster »в своем« SELECT », и вы запрашиваете элемент, который не существует в запрос. –

+0

Я также подозреваю/спрашиваю ''%: search% ''- двоеточие внутри там может быть или не быть действительным. Вы пытались использовать ''% search% ''? –

ответ

0

вы получаете неверный запрос, поскольку вы используете синтаксис связывания с PDO параметра Я

начать с чем-то очень простым, как

$search= mysql_escape_string($search); 
$query = "SELECT Movie_Name FROM movie_info WHERE name LIKE '%".$search."%'; 

После того, как вы получите, что работает, перейдут к более сложной логике ...

Еще лучше использовать PDO сделать запрос:

<?php 
$stmt = $db->prepare("SELECT * FROM table WHERE id=:id AND name=:name"); 
$stmt->bindValue(':id', $id, PDO::PARAM_INT); 
$stmt->bindValue(':name', $name, PDO::PARAM_STR); 
$stmt->execute(); 
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); 

пример из: http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers

+0

Полезная идея, Получение уведомления: преобразование строки в строку C: \ xampp \ htdocs \ movies \ get_search.php в строке 9 сейчас – Mike

+0

Спасибо, я попробую и заставить его работать ... – Mike

+0

Я обновил свой код, не получая никаких ошибок, просто пустую страницу. – Mike

1
  1. Вы не можете использовать часть строки в качестве заполнителя; заполнители могут заменять только одну целую стоимость. Используйте LIKE :search и привяжите '%' . $search . '%' как значение.
  2. Вы не являетесь обязательными для любых значений. :)
+0

Хорошо, спасибо за подсказку. Все еще работаю над этим/обучением. – Mike

Смежные вопросы