【问题标题】:PHP Database Searchform SQL TroublePHP 数据库搜索表单 SQL 问题
【发布时间】:2014-12-14 20:34:34
【问题描述】:

我的数据库中有三个表; ACTOR_DETAIL、MOVIE_ACTOR 和 MOVIE_TITLE。每个表中的条目包括:

对于 ACTOR_DETAIL(4 个字段 = 演员序列号、姓名、生日、性别):

(ACTOR_SEQUENCE_NB)(姓名)(生日)(性别)

001 约翰 1964 年 1 月 1 日男性

002 戴夫 2/2/1980 男

003 简 3/3/1975 女

对于 MOVIE_TITLE(3 个字段 = MOVIE_SEQUENCE_NB、MOVIE TITLE、YEAR)

SSN 名称城市

001 电影标题 A 1987

002 电影标题 B 2008

003 电影标题 C 2014

最后一个表 MOVIE_ACTOR 将两者结合在一起(3 个字段 = MOVIE_SEQUENCE_NB、ACTOR_SEQUENCE_NB、CHARACTER_PLAYED)

WSN SSN 支付

001 003 主角(在 MovieTitleC 中饰演主角的约翰)

003 001 敌对者(简,曾在 MovieTitleA 中饰演敌对者)

002 003 反英雄(在 MovieTitleC 中饰演的戴夫饰演反英雄)

我目前正在制作一个搜索表单,允许用户输入工人的姓名。然后搜索表单将获取输入名称,将其与相应的 WSN 进行匹配,获取 WSN 并将其与相应的 SSN 进行匹配,获取 SSN,然后将其与相应的 Store Name 和 City 进行匹配,然后输出该信息(The Store STORE_NAME 表中的名称和城市)。

在我的标题为:searchform.html 的文档中,这是生成表单的 sn-p:

<html> <head>

<title>Search</title>
</head>
<body bgcolor=#ffffff>

<h2>Search</h2>

<form name="search" method="post" action="searchform.php">  

Name of Actor: <input type="text" name="find1" />

<input type="submit" name="search" value="Search" /> 

</form>

</body>

</html>

这是我的 php 文档:

<?php

include "config.php";

echo "<h2>Search Results:</h2><p>";

if(isset($_POST['search']))            
{
$find1 =$_POST['find1'];
$find2 =$_POST['find2'];
$field =$_POST['field'];
}

// We perform a bit of filtering
$find1 = strtoupper($find1);
$find1 = strip_tags($find1);
$find1 = trim ($find1);

$find2 = strtoupper($find2);
$find2 = strip_tags($find2);
$find2 = trim ($find2);

//Now we search for our search term, in the field the user specified
$iname = mysql_query("select ACTOR_DETAIL.ACTOR_SEQUENCE_NB, MOVIE_SEQUENCE_NB.MOVIE_TITLE, MOVIE_SEQUENCE_NB.YEAR_FILMED
from MOVIE_ACTOR join
     ACTOR_DETAIL 
     on MOVIE_ACTOR.ACTOR_SEQUENCE_NB = ACTOR_DETAIL.ACTOR_SEQUENCE_NB join
     MOVIE_TITLE 
     on MOVIE_ACTOR.MOVIE_SEQUENCE_NB = MOVIE_TITLE.MOVIE_SEQUENCE_NB
where ACTOR_DETAIL.NAME = "$find1")

or die(mysql_error());

//And we display the results
while($result = mysql_fetch_array($iname ))
{
echo "<b>Movie Name:</b> " .$result['MOVIE_TITLE'];
echo "<br> ";
echo "<b>Year:</b> ".$result['YEAR_FILMED'];
echo "<br>";
echo "<br>";
}

$anymatches = mysql_num_rows($iname);
if ($anymatches == 0)
{
echo "Sorry, but there aren't any movies with that combination of actors!<br><br>";
}

?>

我已经省略了数据库连接,但我已经确认它可以工作。我的错误似乎与 SQL 语句有关,但我不太确定它是什么。有人可以帮忙吗?

【问题讨论】:

  • 你有没有在脚本中产生任何错误?
  • 是的。它给了我“解析错误:语法错误,第 49 行 /home/wmnation/public_html/actorchemistrysearch2.php 中的意外 T_VARIABLE”,这是 php 脚本中 ACTOR_DETAIL.NAME = "$find1" 的位置

标签: php mysql sql search join


【解决方案1】:

您没有在查询中转义您的值。其中一项更正应该是..

$iname = mysql_query('select ACTOR_DETAIL.ACTOR_SEQUENCE_NB, MOVIE_SEQUENCE_NB.MOVIE_TITLE, MOVIE_SEQUENCE_NB.YEAR_FILMED
from MOVIE_ACTOR join
     ACTOR_DETAIL 
     on MOVIE_ACTOR.ACTOR_SEQUENCE_NB = ACTOR_DETAIL.ACTOR_SEQUENCE_NB join
     MOVIE_TITLE 
     on MOVIE_ACTOR.MOVIE_SEQUENCE_NB = MOVIE_TITLE.MOVIE_SEQUENCE_NB
where ACTOR_DETAIL.NAME = "'.$find1.'"');

此外,极不可能有人会通过与您存储在数据库中的完全相同的 Actor 名称进行搜索。可能值得使用 %LIKE% 或 MATCH。

【讨论】:

  • 嗨。感谢您的建议和建议;我一定会这样做,但目前,我想按原样修复此 SQL 语句。我现在收到错误:“解析错误:语法错误,第 51 行 /home/wmnation/public_html/actorchemistrysearch2.php 中的意外 T_LOGICAL_OR”,它指的是“或死亡”语句?
  • 你把你的数据库连接放回去了吗?)
  • 我做到了。会不会是别的?
  • 好吧,没有看到是不可能调试的。不是吗?
  • 真的。我们至少可以确认sql语句逻辑是正确的吗?调试连接应该很简单。