【问题标题】:Warning on mysql_fetch_array()mysql_fetch_array() 上的警告
【发布时间】:2013-09-23 04:18:46
【问题描述】:

很抱歉浪费您的时间,但我正在尝试将数据库表中的数据存储到数组中并显示在表中。我不断收到同样的错误。我已经更改了"'s 并删除了变量。我还是得到了

警告:mysql_fetch_array():提供的参数不是第 41 行 /home/a3656574/public_html/Home.php 中的有效 MySQL 结果资源

<?php
if ($_POST['search_projects']){

    $con= mysql_connect("host","username","password","a3656574_opacmin") or die ('Error: ' . mysql_error()); 
    $sql= "SELECT * FROM searchedWords WHERE accessDate LIKE '%" . $_POST['search'] . "%' ORDER BY accessDate DESC";
    $result= mysql_query($sql); 

    while($row= mysql_fetch_array($result))
    { 
        $Date =$row['AccessDate']; 
        $Key=$row['keyWord']; 
        $Count=$row['count']; 

        echo "<tr>"; 
        echo "<td>" .$Date ."</td> ". " <td>" . $Key.  " </td>" . " <td>" . $Count.  " </td>"; 
        echo "</tr>";  

    }
}
?>

我不知道如何解决这个问题。有人可以帮忙吗?

【问题讨论】:

  • 请确保这些不是您的真实凭据
  • 确保您的查询是正确的,$sql= "SELECT * FROM searchedWords WHERE accessDate LIKE '%" 。 $_POST['搜索'] 。 "%' ORDER BY accessDate DESC";只需打印它并直接在控制台上运行它
  • 你应该使用mysqli_* 函数,如果我没记错的话,mysql_* 函数从 MySQL 5.5 中被弃用。在任何公共论坛上发帖时,从您的 mysql con 中删除实际凭据。您必须选择一个数据库;你在mysql_query 之前选择过一个吗?
  • $result= mysql_query($sql); 之后添加if(!$result) die(mysql_error())。错误信息是什么?此外,正如 Maz 所说,您应该使用 mysqli 或 PDO 而不是 mysql_ 函数。
  • 通过使用外部变量构建 SQL 语句,您很容易受到 SQL 注入攻击。 此外,任何带有单引号的输入数据,例如 " O'Malley”,会炸毁你的 SQL 查询。请了解如何使用参数化查询(最好使用 PDO 模块)来保护您的 Web 应用程序。 bobby-tables.com/php 有示例可以帮助您入门,this question 有很多详细示例。

标签: php mysql syntax-error


【解决方案1】:

Mysql连接函数接收3个参数(mysql_server, mysql_user, mysql_password)

你应该使用 mysql_select_db(database, connection_resource_id); 选择数据库

还要确保您的凭据

试试:

$con= mysql_connect("host","username","password");
mysql_select_db("a3656574_opacmin",$con);

【讨论】:

  • 好电话,mysql_select_db() 很好地猜测了他对第四个参数的期望。
【解决方案2】:

0) 首先,我敦促您开始使用 PDO 而不是 mysql_connect(和朋友),因为后者已被弃用。有教程可帮助您开始此迁移 here

1) 我不确定您期望 mysql_connect() 的第四个参数为您做什么。根据 PHP 文档,这应该是一个布尔值:

mysql_connect ([ string $server = ini_get("mysql.default_host") [, string $username = ini_get("mysql.default_user") [, string $password = ini_get("mysql.default_password") [, bool $new_link = false...

2) 在转到 mysql_fetch_array() 之前检查错误情况:

$sql= "SELECT * FROM searchedWords WHERE accessDate LIKE '%" . $_POST['search'] . "%' ORDER BY accessDate DESC";
$result= mysql_query($sql); 

if (! $result) {
    // use something like mysql_error() to find out why it failed, log it, etc.
} else {
    while( ... ) { ... }
}

【讨论】:

  • 感谢您的快速回复。不过我终于做对了。找个人亲自帮助我。我也读到了 PDO,mysql_fetch_array() 和类似的函数很快就会被删除。我现在要开始适应了。无论如何,再次感谢您。
【解决方案3】:

首先我想推荐你开始使用“mysqli”。你可以找这个here

然后您应该首先检查您的凭据是否正确。如果这是正确的,请到 phpmyadmin 并尝试您的查询,看看它是否工作正常。也许你错过了一些东西。祝你好运。

【讨论】:

    【解决方案4】:

    请检查您的数据库凭据,然后尝试:

    <?php
      if ($_POST['search_projects'] && !empty($_POST['search']))
      {
        $con= mysql_connect("host.com","opacmin","password","opacmin") or die ('Error: ' . mysql_error()); 
    
        $sql= "SELECT * FROM searchedWords WHERE accessDate LIKE '%" . $_POST['search'] . "%' ORDER BY accessDate DESC";
        $result= mysql_query($sql); 
    
        while($row= mysql_fetch_array($result))
        { 
          $Date =$row['AccessDate']; 
          $Key=$row['keyWord']; 
          $Count=$row['count']; 
    
          echo "<tr>"; 
          echo "<td>" .$Date ."</td> ". " <td>" . $Key.  " </td>" . " <td>" . $Count.  " </td>"; 
          echo "</tr>";  
        }
      }
    ?>
    

    【讨论】:

    • 也许删除 OP 错误提供的凭据?
    • 感谢您的回复。
    猜你喜欢
    • 2014-11-22
    • 2013-02-23
    • 2014-04-09
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多