【问题标题】:Problems using PHP and Mysqli to search a database using LIKE使用 PHP 和 Mysqli 使用 LIKE 搜索数据库的问题
【发布时间】:2015-03-31 14:12:45
【问题描述】:

我在运行下面的脚本时出现错误,我不知道如何更正它。本质上,我在mysql中有一个名为gamestbl的表。我希望用户输入一些关于游戏名称或游戏描述的关键词,然后 php 将正确的游戏显示为下拉列表(理想情况下),甚至显示为信息表。

错误提示:

警告:mysqli_query() 至少需要 2 个参数,1 个在 C:\xampp\htdocs\introducingphp\Email.php 第 29 行给出

与 警告:mysqli_fetch_array() 期望参数 1 为 mysqli_result,在第 56 行的 C:\xampp\htdocs\introducingphp\Email.php 中给出 null

第 56 行是我的 While 语句。 第 29 行是 ....$q=mysqli_query($sql);

<!DOCTYPE HTML>
<HTML>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<?php
//Connect to the Database
$dbhost = "localhost";
$dbuser = "root";
$dbpass = "DON'T TELL*";
$dbname = "Games";

//Create connection
$conn = mysqli_connect($dbhost,$dbuser,$dbpass,$dbname);

// Show error if connection fails
if (!$conn){ 
    die("Connection failed: " .
        mysqli_connect_error());
}

if(isset($_REQUEST['submit'])){
    $search=$_POST['search'];
    $sql=" SELECT * FROM gamestbl WHERE game_name LIKE '%".$search."%' OR game_description LIKE '%".$search."%'";
    $q=mysqli_query($sql);
}
else{
    $sql="SELECT * FROM gamestbl";
    $q=mysqli_query($sql);
}
?>

<title>Experiment</title>
</head>

<body>
<form method="post">
    <table width="200" border="1">
  <tr>
    <td>Search</td>
    <td><input type="text" name="search" value="" /></td>
    <td><input type="submit" name="submit" value=" Find " /></td>
  </tr>
</table>
</form>
<table>
    <tr>
        <td>Game ID</td>
        <td>Game Name</td>
        <td>Game Description</td>
        <td>Game Genre</td>
        <td>Requested Days</td>
        <td>Game Price</td>
    </tr>

<?php
while($res=mysqli_fetch_array($q)){
?>
<tr>
    <td><?php echo $res['game_id'];?></td>
    <td><?php echo $res['game_name'];?></td>
    <td><?php echo $res['game_description'];?></td>
    <td><?php echo $res['game_genre'];?></td>
    <td><?php echo $res['requested_days'];?></td>
    <td><?php echo $res['game_price'];?></td>
</tr>
    <?php }?>
</table>

</body>
</html>

对不起,如果这听起来很糟糕 - 我是 mysqli 和 php 的真正初学者

【问题讨论】:

  • 在使用while循环之前先调试print '&lt;pre&gt;'; print_r($q);
  • mysql_query() 如果发生某些 SQL 错误,则返回 FALSE。检查您的$q,如果是FALSE,请使用mysql_error() 查看该错误。
  • 可能在你的 $search 中引用了一些引号,以此作为学习准备好的语句的借口。而且你正在混合 mysqli 和 mysql
  • 你正在混合 mysql 和 mysqli ..正如我上面的人所说的那样。将 mysql_fatch_array() 函数更改为 mysqli_fatch_array()
  • @CodingHorror 嗯,我是否应该使用 mysqli 更改所有 mysql 实例以保持一致?我还有两个 mysql 语句(请参阅 IF(isset .....。没有意识到这两者不能互换使用。

标签: php search mysqli


【解决方案1】:

首先,这不是 mysqli,这是 mysql,你必须避免使用它 接下来,此错误表示您有 sql 语法错误。所以我建议你看看 $_POST['search']. 尝试打印变量 $sql 并查看是否一切正常(将其粘贴到 mysql 中)..

无论如何,开始使用 PDO!这是一个适合初学者的好网站:http://www.phptherightway.com

编辑:: 发现问题 - 连接在 mysqli 中,其余的是 mysql.. 干杯!

【讨论】:

    【解决方案2】:

    您正在混合两种不同的 API,MYSQLMYSQLI 不同且已被弃用,请改用 PDOMYSQLI,但不要同时混合使用。请参阅PDO 的文档或 MYSQLi

    注意:您使用mysqli_connect() 进行数据库服务器连接,但您使用mysql_query() 查询数据并使用mysql_fetch_array() 进行循环为什么要统一

    【讨论】:

    • 谢谢,我现在更新了脚本以反映 mysqli(请参阅改进后的帖子),但同一行仍然存在问题,并且启动时出现进一步错误。不过,我很高兴得知 mysqli 和 mysql 是不同的!您还有什么建议吗?
    • 在使用 while 循环之前尝试print_r($q),我认为您的查询没有返回任何结果,这就是您看到该错误的原因
    • while 语句仍然显示相同的错误。没有给出其他消息或数据。我想这表明我的查询语句不好。不知道如何在 mysql 中编写 LIKE 语句,并想知道这是否是问题所在。我将尝试对此进行更多研究,但任何进一步的建议都将非常受欢迎
    • 在 php 代码中使用之前,尝试使用您的 search term 到您的 phpmyadminnavicate 或任何其他程序执行此查询。例如 SELECT * FROM gamestbl WHERE game_name LIKE '%your_search_game%' OR game_description LIKE '%your_search_description%'";
    【解决方案3】:

    在提交表单中放置另一个正文标签,打开和关闭正文标签将分隔您的mysqli查询并为您的问题提供解决方案。

    【讨论】:

    • 如果您为建议的解决方案添加示例,我认为您会为 OP 提供更多帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 2015-01-31
    • 1970-01-01
    相关资源
    最近更新 更多