试图通过PHP搜索数据库

时间:2015-10-26 20:47:51

标签: php mysql

我已经编写了一些代码来搜索数据库中输入的内容,但它只显示一个白色屏幕。我仍然不确定使用OO,所以也许这是查询?我尝试了几种不同的方法,但同样的白色屏幕。必须是显而易见的东西才需要另一双眼睛。

与数据库的连接工作正常,因此它不是问题而且$ POST值是正确的。

的search.php

<?php 
session_start();
include 'searchform.php'
include 'pagetemplate.php';
if(isset($_POST['searchsubmit'])){
        $name=$_POST['name'];
                if ($stmt = $connection->prepare ("SELECT * FROM users WHERE FirstName LIKE ? OR LastName LIKE ? OR Username LIKE ?")) 
                {
                $stmt->bind_param('sss', $name, $name, $name);
                $stmt->execute();
                $stmt->bind_result($personresult);
                $stmt->fetch();
                printf($personresult);
                } 
                else
                { 
                echo  "<p>Please enter a search query</p>"; 
                } 
            } 
        } 

    ?>

2 个答案:

答案 0 :(得分:0)

你有一个额外的},试试这个......

<?php 
session_start();
include 'searchform.php'
include 'pagetemplate.php';
if(isset($_POST['searchsubmit']))
{
        $name=$_POST['name'];

        if ($stmt = $connection->prepare ("SELECT * FROM users WHERE FirstName LIKE ? OR LastName LIKE ? OR Username LIKE ?")) 
        {
            $stmt->bind_param('sss', $name, $name, $name);
            $stmt->execute();
            $stmt->bind_result($personresult);
            $stmt->fetch();
            printf($personresult);
        } 
        else
        { 
            echo  "<p>Please enter a search query</p>"; 
        } 
} else
     echo "NOT SET!";

?>

答案 1 :(得分:-1)

可能有很多东西,但这可能是进行搜索的理想方式。确保始终使用addslashes()来防止SQL注入。

$selectStmt = "SELECT * FROM users WHERE (FirstName LIKE '%".addslashes($_POST['searchquery']) ."%') OR (LastName LIKE '%".addslashes($_POST['searchquery']) ."%') OR (Username LIKE '%".addslashes($_POST['searchquery']) ."%')";
$result = mysql_query($selectStmt);
while($row = mysql_fetch_assoc($result)) print_r($row);

正如其他人所提到的,while页面可能是语法错误,或者在关闭错误报告时出现其他错误。如果您还没有启用错误报告。

如果仍然无效 - 请回显上面的$ selectStmt并尝试在phpMyAdmin中打印输出。 MySQL将为您提供更有意义的更正。

编辑:显然我的方法有点过时,但功能不逊色。这是使用MySQLi对象的备用版本。您还可以使用mysql_real_escape_string()代替$ selectStmt中的addslashes(),以获得更适合该任务的内容。

$dbConnection = new mysqli($host, $user, $password, $name);
if ($result = $dbConnection->query($selectStmt)) {
    while($row = $result->fetch_assoc()) {  print_r($row);  }
}