如何让我的搜索查询工作php到sql?

时间:2015-11-21 16:38:10

标签: php html mysql

在我的名为searchproduct1.html的HTML页面上,我有以下表单代码:

<form action="search1.php" method="post">
<input type="text" name="keyword">
<input type="submit" name="search" value="Search">
</form>

对于我的名为search1.php的php页面,我有:

    $username = "user";
$password = "pass";
$host = "xyz";
$db = $username;
$connection = mysqli_connect($host, $username, $password, $db);
if (mysqli_connect_error()){
 echo "Failed to connect to MySQL: " . mysqli_connect_error();
if (!$connection) {
    die ("Please reload page. Database connection failed: " . mysqli_error());
}
if (isset($_POST['keyword'])) {
$keyword = trim ($_POST['keyword']);

$search = "SELECT * FROM ProductManagement WHERE cause_name LIKE '%$keyword%'";
$result = mysqli_query($search) or die('query did not work');
}
while($result_arr = mysqli_fetch_array( $result )) 
{ 
echo $result_arr['cause_name']; 
echo " ";
echo "<br>"; 
echo "<br>"; 
}
$anymatches=mysqli_num_rows($result); 
if ($anymatches == 0) 
{ 
   echo "Nothing was found that matched your query.<br><br>"; 
}
}
?>

SQL数据库工作正常,用于通过HTML向数据库添加记录。当我在html页面上输入一个值时,它表示无法显示search1.php页面。有人能指出我正确的方向吗?我是PHP和SQL的新手。

编辑:已更改为mysqli

EDIT2:删除了页面底部的'}'并删除了exit命令。 PHP页面加载,但是空白

2 个答案:

答案 0 :(得分:2)

此答案基于其原始帖子https://stackoverflow.com/revisions/33845874/1

您正在使用与mysql_混合的很多mysqli_个函数。

那些不同的API不会混用。为所有i个功能添加mysql_*

例如,这个

mysql_error()需要读作mysqli_error($connection)

然后$result = mysql_query($search)
需要读作$result = mysqli_query($connection,$search);

然后

mysql_fetch_arraymysqli_fetch_array

您的代码也可以进行SQL注入。使用准备好的声明。

根据你的编辑

$result = mysqli_query($search)

在看到你的编辑之前我已经在上面写了它。它需要DB连接作为第一个参数。

阅读手册:

并且如另一个答案所示,你有一个exit();,它不应该属于那个并且会做到这一点;出口/停止/暂停。

or die('query did not work');无法帮助您查找错误。

  • 这是or die(mysqli_error($connection));

另外,如果这是您表单的确切代码,则会缺少结束</form>标记。

error reporting添加到文件的顶部,这有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注:只应在暂存时进行显示错误,而不是生产。

N.B。:

如果你遇到错误,那么你需要逃避你的输入;无论如何你应该做的事情。

现在,在将代码放入我的编辑器之后,这个条件语句:

if (mysqli_connect_error()){

及其匹配的右括号错位。

你应该这样做:

if (mysqli_connect_error()){
 echo "Failed to connect to MySQL: " . mysqli_connect_error();
 } // added

并在PHP结束时删除其中一个大括号}

修改

这是我的最终修改。并重写。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

$username = "user";
$password = "pass";
$host = "xyz";
$db = "your_DB"; // and NOT $username if "user" isn't your database's name
$connection = mysqli_connect($host, $username, $password, $db);

if (!$connection) {
    die ("Please reload page. Database connection failed: " . mysqli_error($connection));
}
if (!empty($_POST['keyword'])) {
$keyword = trim($_POST['keyword']);

$search = "SELECT * FROM ProductManagement WHERE cause_name LIKE '%$keyword%'";
$result = mysqli_query($connection, $search) or die(mysqli_error($connection));
}
while($result_arr = mysqli_fetch_array( $result )) 
{
echo $result_arr['cause_name']; 
echo " ";
echo "<br>"; 
echo "<br>"; 
}
$anymatches=mysqli_num_rows($result); 
if ($anymatches == 0) 
{
   echo "Nothing was found that matched your query.<br><br>"; 
}

?>

答案 1 :(得分:1)

这取决于你得到的“无法显示”错误 - 我的预感是这是一个500错误,因为你的代码中有很多'看起来像'的错误:

1 /您正在使用mysqli_connect进行连接,但之后尝试在代码中使用mysql_ *不推荐使用的函数 - 当您没有mysql连接时 - 确保您只是在整个过程中使用mysqli_ *函数。

2 /获得$ result后,你的代码中有一个exit()语句,这意味着你永远不会真正处理结果的结果:

if (isset($_POST['keyword'])) {
    $keyword = trim ($_POST['keyword']);

    $search = "SELECT * FROM ProductManagement WHERE cause_name LIKE '%$keyword%'";
    $result = mysql_query($search) or die('query did not work');
    exit(); //This shouldn't be here...
}

3 / if(!connection){将始终返回true - 应该是if(!$ connection){,但这本身不会导致500。