完成数据库查询时出现SQL语法错误

时间:2015-07-17 06:48:44

标签: php mysql

我试图在视频数据库中搜索有关它们的信息。一切都在一页。没有外部表单发布到此页面,它位于此页面上。

<?php
$connection = mysql_connect("localhost","root","Oliver") or die (mysql_error());

mysql_select_db("videos", $connection) or die (mysql_error());

$sql = "SELECT * FROM videos";

if (isset($_POST['search'])){
  $search_term = mysql_real_escape_string($_POST['search_box']);

  $sql .= "WHERE name LIKE '{$search_term}'";
}

$query = mysql_query($sql) or die(mysql_error());

?>
<html>
<form name="search_form" method="POST" action="display_data.php">
  <input type="text" name="search_box" placeholder="Search..."/>
  <input type="submit" name="search" value="Search"/>
</form>
<table style="width:70%; cellpadding:5 cellspace:6">

<tr>
  <td><strong>Film ID</strong></td>
  <td><strong>Name</strong></td>
</tr>
<?php while ($row = mysql_fetch_array($query)) {?>
  <tr>
    <td><?php echo $row['ID']; ?></td>
    <td><?php echo $row['name']; ?></td>
  </tr>


<?php } ?>

</table>
</html>

但是我收到以下错误

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIKE 'Walking'' at line 1

步行只是搜索词。

6 个答案:

答案 0 :(得分:4)

在实际运行之前你应该echo $query,复制输出并直接在mysql会话中运行它。我猜测它会告诉您在"WHERE"关键字之前需要一个空格。

哦,mysql_query已被弃用且非常危险 - 请改为PDO or mysqli

答案 1 :(得分:1)

看起来你的问题是你的字符串的连接。结果将是SELECT * FROM videosWHERE name LIKE '{$search_term}';

WHERE之前添加空格,错误应该消失。

您不应再使用已弃用的mysql_* API。将mysqli_*PDO与预准备语句一起使用以防止sql注入。

答案 2 :(得分:1)

SIMPLY为你的WHERE子句添加空间,如下所示:

$sql .= " WHERE name LIKE '{$search_term}'";

答案 3 :(得分:1)

只需在WHERE之前添加一个空格!

$sql .= " WHERE name LIKE '{$search_term}'";

答案 4 :(得分:1)

您的查询是

$sql = "SELECT * FROM videos";
$sql .= "WHERE name LIKE '{$search_term}'";

videos and where

之间没有空格

您需要添加空间

$sql .= " WHERE name LIKE '{$search_term}'"; 
         ^

答案 5 :(得分:1)

您可以使用addslashes()功能,而不是mysql_real_escape_string()。带有斜杠的引号字符串,当你在字段中添加任何撇号时,它对你非常有用。

我已经设置了上面详细的PHP代码,替换为您的PHP代码部分并检查。

<?php
$connection = mysql_connect("localhost","root","Oliver") or die (mysql_error());

mysql_select_db("videos", $connection) or die (mysql_error());

//Select statement for query

$sql = " SELECT * FROM videos ";
//Check for request
if (isset($_POST['search'])){
   //Prepare request value for query
   $search_term = addslashes($_POST['search_box']);

   //Where statement
  $sql .= " WHERE name LIKE '" . $search_term . "' ";
}

$query = mysql_query($sql) or die(mysql_error());
?>

我删除了一些错误并设置了addslashes()。请试试这个。

我建议你,不要使用旧的mysql *函数,而是使用PDO并编写参数化查询。

如果我需要任何帮助,请告诉我。