简单的PHP搜索代码不返回和结果

时间:2015-03-01 02:08:57

标签: php mysql

我正在尝试使用简单的php搜索脚本。它目前从html捕获数据并将其存储在$ input中。问题是我不断从下面的脚本中得到任何结果。但是根本没有错误消息。我知道数据库中有完全匹配的数据,但是在没有数据的情况下,我不断从下面的代码中获取消息。我的SQL有问题吗?

<?php 
//declaring variable 
$input = $_POST['find']; 
//If they did not enter a search term we give them an error 
if ($input == "") { 
echo "You forgot to enter a search term"; 
exit; 
} 
//open connection 
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );


//the sql statement 

$results = $dbh->prepare("select 
wp_users.ID,
wp_users.display_name,
stories.SID,
stories.story_name,
stories.category,
stories.genre
FROM stories
LEFT JOIN wp_users ON stories.ID=wp_users.ID
WHERE stories.story_name = '$input' OR stories.genre = '$input'");

$results->execute();
$row = $results->fetchAll(PDO::FETCH_ASSOC);

//giving names to the fields 
$storyname = $row['story_name']; 
$category = $row['category']; 
$genre = $row['genre']; 

//put the results on the screen 
echo "<b>$storyname</b>"; 
echo "$categoy"; 
echo "$genre<br>"; 

//This counts the number or results – and if there wasn’t any it gives a  
little message explaining that 
$anymatches=$row; 
if ($anymatches == 0) 
{ 
echo "<h3>Results</h3>"; 
echo "<p>Sorry, your search: &quot;" . $input . "&quot; returned zero  
results</p>"; 
}

?> 

2 个答案:

答案 0 :(得分:0)

$results = $dbh->prepare("select 
wp_users.ID,
wp_users.display_name,
news.SID,
news.story_name,
news.genre
FROM stories
LEFT JOIN wp_users ON news.ID=wp_users.ID
WHERE news.story_name = $input OR news.genre = $input");

基本上,在编写这些查询时,您需要将字符串括在引号中。现在,您的查询将包含

news.story_name=Five Cats Go Missing

你需要它

news.story_name='Five Cats Go Missing'

将其括在引号news.story_name='$input'中,依此类推。

答案 1 :(得分:0)

首先,由于您使用的是PDO,请绑定您的变量。我相信你现在很容易受到SQL注入攻击。第二次打开您的PDO错误消息,如果您没有打开它们,则会显示PHP错误消息。 @Ghost建议如何打开PDO的错误报告,并且可以用<?php error_reporting(-1) ?>用于PHP报告。

有关错误报告的更多详细信息,请参阅以下链接:
PHP错误报告:http://php.net/manual/en/function.error-reporting.php
PDO错误报告:http://php.net/manual/en/pdo.errorinfo.php

我也可以检查$results->execute();的返回值。如果您的SQL查询语句没有任何问题,那么它应返回true,否则它将返回false,因此您的SQL出现了问题。