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);