【问题标题】:Can't Change mysql_fetch_array to mysqli_fetch_array无法将 mysql_fetch_array 更改为 mysqli_fetch_array
【发布时间】:2012-10-23 18:10:19
【问题描述】:

我正在我正在构建的网站上进行分页,我在这里找到了一个很好的分页示例:http://www.awcore.com/dev/1/3/Create-Awesome-PHPMYSQL-Pagination_en。我想在我的页面上给我们这个,但我使用的是 mysqli 而不是 mysql,需要转换一些。

我是 MySQL 新手,正在尝试找出转换以下代码的语法:

function pagination($query, $per_page = 10,$page = 1, $url = '?'){        
    $query = "SELECT COUNT(*) as `num` FROM {$query}";
    $row = mysql_fetch_array(mysql_query($query));
    $total = $row['num'];
    $adjacents = "2"; 

我知道它并不能告诉您整个代码是什么(大约 100 行长),但我假设这可能是一个简单的语法更改。我最初是这样做的:

function pagination($query, $per_page = 10,$page = 1, $url = '?'){        
    $query = "SELECT COUNT(*) as `num` FROM {$query}";
    $row = mysqli_fetch_array(mysqli_query($query));
    $total = $row['num'];
    $adjacents = "2";

我知道 mysqli_query 需要采用两个参数,但我也认为 mysql_query 是一样的,所以我想我只是不理解代码。抱歉,如果这是一个超级基本的问题,我只是想围绕其中一些概念来思考!感谢您的帮助。

顺便说一句,我确实看到了这个问题 (Converting from mysql to mysqli (mysql_fetch_array)),但他似乎采取了一些可能不需要采取的额外步骤。

编辑

这是我在上面的代码中收到的错误消息,仅供参考:

警告:mysqli_query() 至少需要 2 个参数,1 个在第 9 行的 linkinformation/functions.php 中给出

警告:mysqli_fetch_array() 期望参数 1 为 mysqli_result,在第 9 行的 linkinformation/functions.php 中给出 null

编辑

所以我在函数内添加了一个连接(这是正确的方法吗?我尝试在函数外部进行连接,但它正在获取信息):

function pagination($mysqli, $query, $per_page = 10,$page = 1, $url = '?'){        
    $mysqli = mysqli_connect("localhost","username","password", "db_name");
    $query = "SELECT COUNT(*) as `num` FROM {$query}";
    $row = mysqli_fetch_array(mysqli_query($mysqli, $query));
    $total = $row['num'];
    $adjacents = "2"; 

我收到此警告:

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in linkstuff/functions.php on line 10

它得到一个布尔值(我假设它是 TRUE),而它应该得到我认为的其他东西/实际查询。

【问题讨论】:

  • mysqli_query($query) 后面少了一个括号。
  • 啊,是的,刚刚发现。并没有真正改变我得到的错误。我将在上面进行编辑。
  • mysqli_query 需要两个参数,第一个是连接链接,您的代码中缺少该参数
  • 我很好奇它是如何在为 mysql_query 编写的原始代码中正常运行的?那只需要一个参数吗?
  • 来自 mysql_query 的文档:If the link identifier is not specified, the last link opened by mysql_connect() is assumed. If no such link is found, it will try to create one as if mysql_connect() was called with no arguments. If no connection is found or established, an E_WARNING level error is generated.

标签: php mysql mysqli


【解决方案1】:

//你需要改变这些变量

global $conn;  
$conn = new mysqli('localhost','root','',$databasename);

    function pagination($query, $per_page = 10,$page = 1, $url = '?'){        
        $query = "SELECT COUNT(*) as `num` FROM {$query}";
        $result = $GLOBALS['conn']->query($query);
        $row=$result->fetch_array;
        $total = $result->num_rows;
        $adjacents = "2";

【讨论】:

    【解决方案2】:

    类似这样的:

    //You need to change thses variables    
    $conn = new mysqli('localhost','root','',$databasename);
    
        function pagination( $conn,$query, $per_page = 10,$page = 1, $url = '?'){        
            $query = "SELECT COUNT(*) as `num` FROM {$query}";
            $result = $conn->query($query);
            $row=$result->fetch_array;
            $total = $result->num_rows;
            $adjacents = "2";
    

    【讨论】:

    • 我收到了这个错误:Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting T_STRING or T_VARIABLE or '{' or '$' in /linkstuff/functions.php on line 7。第 7 行是以 $conn btw 开头的行。
    • 大括号不一定要在那里,因为它是更大功能的一部分,但我明白你在说什么。这段代码仍然给我一个错误。这次是:Fatal error: Call to a member function query() on a non-object in linkstuff/functions.php on line 11。第 11 行是以 $result ... 开头的行
    • 你需要在函数分页中传递 $conn 作为参数,就像我在上面编辑的那样
    • 我认为如果您将其用作参数,则必须在函数中创建新的 mysqli 连接 ($conn),对吗?
    • 在页面顶部将 $conn 定义为全局 $conn 会更好,然后您不需要将其作为参数传递。你可以访问它 $GLOBAL['conn']
    【解决方案3】:

    您还需要将连接更改为mysqli,并将连接对象作为第一个参数传递给mysqli_query

    function pagination($link, $query, $per_page = 10,$page = 1, $url = '?'){        
        $query = "SELECT COUNT(*) as `num` FROM {$query}";
        $row = mysqli_fetch_array(mysqli_query($link, $query));
        $total = $row['num'];
        $adjacents = "2";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-31
      • 1970-01-01
      • 2016-02-13
      相关资源
      最近更新 更多