0

我正在尝试为我的网站创建搜索,但在执行此操作时遇到了很多麻烦。在我的movies数据库中,我有两个表:movieinfomovie_genres. 下movieinfoMovie_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(以防有很大的不同)。我想我已经接近代码应该是什么了,但我不知道。

截至目前,我在尝试搜索时收到以下错误:

警告:mysql_fetch_array() 期望参数 1 是资源,布尔值在第 12 行的 C:\xampp\htdocs\movies\get_search.php 中给出

新代码:

<?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'];        
?>
4

2 回答 2

1
  1. 您不能将字符串的一部分用作占位符;占位符只能代替一个完整的值。使用LIKE :search和绑定'%' . $search . '%'作为值。
  2. 您没有绑定任何值。:)
于 2013-10-28T04:35:19.710 回答
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

于 2013-10-28T03:46:16.453 回答