Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 搜索多个表_Php_Mysql_Sql_Search - Fatal编程技术网

Php 搜索多个表

Php 搜索多个表,php,mysql,sql,search,Php,Mysql,Sql,Search,我正试图创建一个搜索我的网站,我有很多麻烦做它。在我的movies数据库中,我有两个表:movieinfo和movie\u流派。在movieinfo下,有Movie\u Name,actor1,actor2,actor3,actor4。在电影类型表下,有类型Id。(每个表中都有更多的列,但我只想搜索这些列。) 我目前的代码是: <?php if ($_GET) { $search = $_GET['search']; $connect = mysql_connect("lo

我正试图创建一个搜索我的网站,我有很多麻烦做它。在我的
movies
数据库中,我有两个表:
movieinfo
movie\u流派
。在
movieinfo
下,有
Movie\u Name
actor1
actor2
actor3
actor4
。在
电影类型
表下,有
类型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());
    }
}
?>

您得到的查询无效,因为您使用的是来自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);

  • 不能将字符串的一部分用作占位符;占位符只能代替单个整数值。使用
    类似于:搜索
    并绑定
    “%”$搜索“%”作为值
  • 您没有绑定任何值。:)
    哪个表是海报?你的问题中没有包括这一点,但你提到了
    Movie\u Name
    ,我怀疑你在
    SELECT
    中遗漏了
    Poster
    ,你查询的是一个查询中不存在的项目。我还怀疑/质疑
    '%:search%'
    -其中的冒号可能有效,也可能无效。你试过使用<代码> %%搜索%/<代码>?@迈克,但是为什么重复代码< ActoR1,Acto1,Acto1,Actus1/代码>?惊讶的是没有人提出这样的建议:考虑将角色放在单独的表中并加入,这样就不必查询四个不同的列。(或者,稍后,五、六、七或…)好主意,请注意:C:\xampp\htdocs\movies\get_search.php中的数组到字符串转换在第9行现在我已经升级了我的代码,没有得到任何错误,现在只是一个空白页。
    <?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);