$db之间的差异->;query($query)和$result->;num_rows


Difference between $db->query($query) and $result->num_rows

我是面向对象php的新手。我理解这行的意思

$result = $db->query($query);

这里$db是引用类mysqli实例的对象。正确的

但我不了解

$total_num_rows = $result->num_rows;

while($row = $result->fetch_array())

我知道他们做什么。但我无法理解为什么它写着$result->。。。

整个脚本:

<?php
$host = "localhost";
$username = "root";
$password = "";
$dbname = "compdb";
@ $db = new mysqli($host, $username, $password, $dbname);
if(mysqli_connect_errno())
{
    die("Connection could not be established");
}
$query = "SELECT company_id FROM company_basic_details WHERE company_name = 'ABC'";
$result = $db->query($query);
$total_num_rows = $result->num_rows;
echo "The Results Are : <br>";
while($row = $result->fetch_array())
{
    echo $row['company_id'];
}

?>

假设您是OOP(面向对象编程)的新手,我会尽我所能引导您完成。

当您获得$db时,它是您已经获得的连接对象,您可以使用它来调用实例方法。

表达式$result = $db->query($query)指的是使用$db对象调用查询方法,然后传入上面创建的$query。因此,在这种情况下,-> operator表示一个调用方法的对象。

此语句现在创建一个$result对象,该对象用于$total_num_rows = $result->num_rows;。此行使用$result对象,获取行数并将其存储在变量$total_num_rows中。这就像如果你习惯了数组,那么就可以得到数组的长度。

在您谈到的$row = $result->fetch_array()行中,$result对象用于调用fetch_array()方法,该方法将一行数据作为数组返回,并将其存储在$row中。

$db中的查询正在传回包含结果的mysqli_result对象的实例,这就是为什么您使用$result中的方法,而不是$db。您的$db实例仅包含您的请求。

您可以查看此处以更好地了解传递的内容。http://www.php.net/manual/en/class.mysqli-result.php

当您执行查询时,您将获得一个新对象作为响应(Mysqli_Result的实例),假设没有查询错误,而查询错误将返回false。

这个新对象表示查询的结果。但不是数据库连接本身。它有一个属性$result->num_rows,用于获取结果集中的行数。$result->fetch_array()每次调用(使用内部指针)时都会返回一个新行(作为数组)。