2013-12-22 46 views
-2

我有一个问题得到一个num_row当我获取结果作为数组:正确的命令顺序fetch_array(mysqli的OOP)后获得NUM_ROWS

$sql = "SELECT * FROM people WHERE peopleid=?"; 
if (!($stmt = $mysqli->prepare($sql))) { 
echo "stmt Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error; 
} 

if (!$stmt->bind_param("i", $_GET['peopleid'])) { 
echo "Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error; 
} 

if (!$stmt->execute()) { 
    echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error; 
} 

$stmt->store_result(); 
$exist=$stmt->num_rows; 
$result = $stmt->get_result(); 
$peopleres = $result->fetch_array(MYSQLI_ASSOC); // this does work :) 
if ($exist == 0) { 
//do something it it's zero 
} 

如果我放在store_results和NUM_ROWS它在哪里在这个例子中我得到一个

调用一个非对象错误的成员函数fetch_array()。

如果我把它放在fetch_array之后,它总是等于零。我以前成功地使用了num_rows,但这是我第一次尝试将它与fetch_array一起使用。

+0

问问自己你在那里做什么 – hek2mgl

+0

嗯,我已经读过num_rows必须在store_result();上午343点,所以我错过了什么? :-) – Ian

+0

我的建议:明天再去睡觉,再试一次:) – hek2mgl

回答

2

在文档

mysqli_result::$num_rows
int $mysqli_result->num_rows;

看看如果你想出于某种原因使用num_rows代替

$stmt->store_result(); 
$exist=$stmt->num_rows; 
$result = $stmt->get_result(); 
$peopleres = $result->fetch_array(MYSQLI_ASSOC); // this does work :) 
if ($exist == 0) { 
//do something it it's zero 
} 

,你可以尝试

$result = $stmt->get_result(); 
$exist = $result->num_rows; 
if ($exist == 0) { 
    //do something it it's zero 
} 
$row = $result->fetch_array(MYSQLI_ASSOC); 

现在,如果你只是检查是否有任何行的结果集与否的num_rows的使用不是绝对必要的,因为你已经得到你的结果集客户端。你可以尝试读取行

$result = $stmt->get_result(); 
if (!$row = $result->fetch_array(MYSQLI_ASSOC)) { 
    //do something if there's no row 
} else { 
    //do what you have to do with you data in the row 
    echo 'peopleid: ' . $row['peopleid']; 
} 
+0

我认为@YourCommonSense是正确的,当他说'num_rows'不可靠并且不需要在这里 - 他只是没有解释它。为什么不提取数据并对提取循环中的记录数进行计数?记录数量不需要使脚本正常工作。如果您只对计数感兴趣,那么SQL'SELECT COUNT(..)'更便携 – hek2mgl

+0

@ hek2mgl我完全同意OP可以不用'num_rows'管理的事实。就SQL最有可能感兴趣的是相当于'EXISTS()'而不是'COUNT()'而言,这是不相同的。但是,OP又问了一些关于'num_rows'的具体问题,他可能希望看到它正在工作。 – peterm

+0

你应该添加一个关于这个句子,并将获得加票;) – hek2mgl

-3

num行是有史以来最无用的函数。
而且你也不需要它。就去拿你的数据,并用它来代替$存在标志:

if(!$peopleres) ... 
+2

如果你看到为什么'num_rows'无用或不可靠的原因,你应该解释它们。对于非常没有经验的OP,这种回答质量并不是很有帮助。如果你还没有回答这个问题,也许它会更好 – hek2mgl

-3

您还可以使用:

$exist = $stmt->affected_rows;

删除:

$stmt->store_result(); 
$exist=$stmt->num_rows; 
$result = $stmt->get_result(); 

地址: $结果= $ stmt-> get_result( ); $ exist = $ stmt-> affected_rows;

+1

这是不相关的问题 – Grey