2016-01-20 86 views
2

我是PHP/MYSQLI的新手,我无法创建一个简单的搜索来搜索我的数据库。我的数据库中的列是:'ID','姓名','年龄'。我的数据库的名称是'users',表名是'employees'。PHP/MYSQLI简单搜索不起作用

下面是代码:

<?php require('Connections/Localhost.php'); ?> 
<?php 
if (isset($_POST['Search'])) { 
    $search = $_POST['element']; 
    $sql = mysqli_query("SELECT * FROM employees WHERE Name = '$search' "); 
    if($sql->num_rows > 0) { 
     while($rows = $sql->fetch_assoc()) { 
      $id = $rows['ID']; 
      $name = $rows['Name']; 
      $age = $rows['Age']; 
      echo "ID: $id <br> Name: $name <br> Age: $age <br>"; 
     } 
    } 
    else { 
     echo "No Result Found!"; 
    } 
} 
?> 
<!doctype html> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>Untitled Document</title> 
</head> 
<body> 
<form method="post"> 
<input type="text" name="element" placeholder="Enter A Name"/> 
<input type="button" name="Search" value="Search" /> 
</form> 
</body> 
</html> 

它只是返回一个空白页,没有别的。我希望用户在表单的文本区域输入名称,并单击搜索按钮,数据库中对应于该名称的所有数据应显示在网页上。请纠正我犯了错误的地方。

+0

函数['mysqli_query'](http://php.net/manual/en/mysqli.query.php)也需要连接参数(过程接口),它在手册中说过,至少**转on **你的错误报告 – Ghost

+0

你的mysqli_query函数有一个错误,你需要指定两个参数。尝试调试代码第一个 – Pooya

+0

你需要使用预处理语句,以防止[SQL注入](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) 。因为现在你的代码开放给SQL注入。 – BRoebie

回答

3

您需要将按钮类型更改为submit

您的表格未发布。

变化

<input type="button" name="Search" value="Search" /> 

要:

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

此外,mysqli_query()需要数据库连接资源。

您只给出了sql查询。

$sql = mysqli_query($databaseConnection, "SELECT * FROM employees WHERE Name = '$search' "); 

混合mysqli_query(mysqli的$链路,字符串$查询[摘要$ resultmode = MYSQLI_STORE_RESULT])

Reference

+0

谢谢!它像魅力一样工作。 –

0

作为每OP的请求这里我将解释如果您觉得我没有详细说明某个主题,请在mysqli中准备好的语句的一般概念随意编辑。

  1. 你需要做的第一件事就是准备查询(准备 查询发送一个空数据库查询)。但不是定义参数 ,你会放一个问号。

    1. 之后,您需要将参数绑定到问号请按照查询中的确切顺序!您要做的第一件事就是定义参数字符串的类型是s整数是i,blob 是b。之后,您需要使用数据定义变量。

      1. 而你需要做的第三件也是最后一件事是执行查询。我总是在if语句中使用它,因为它会返回一个 true或false,并且像这样可以检查查询是否失败并处理错误。在这种情况下,你不需要别的东西,因为如果查询返回false,页面将会死亡。

        /*1.*/ 
        $stmt = $databaseConnection->prepare("SELECT * FROM `employees` WHERE `name` = ?"); 
        /*2.*/ 
        $stmt->bind_param("s",$search); 
        /*3.*/ 
        if(!$stmt->execute()) 
        { 
        die("There went something wrong: " . $stmt->error); 
        } 
        

编辑:这里解释更多关于如何防止SQL-injections的问题。

+0

感谢您的帮助。我已经理解了mysqli中Prepared statement的概念。 –

+0

没问题的队友很高兴帮助如果您有任何问题我很乐意帮助您 – BRoebie