Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 准备好的语句-行数_Php_Mysqli_Prepared Statement - Fatal编程技术网

Php 准备好的语句-行数

Php 准备好的语句-行数,php,mysqli,prepared-statement,Php,Mysqli,Prepared Statement,我只是想弄清楚如何确定行数,然后在HTML中显示该行数 我准备的声明如下: if($stmt = $mysqli -> prepare("SELECT field1, field2, field3 FROM table WHERE id= ?ORDER BY id ASC")) { /* Bind parameters, s - string, b - blob, i - int, etc */ $stmt -> bind_param(&

我只是想弄清楚如何确定行数,然后在HTML中显示该行数

我准备的声明如下:

if($stmt = $mysqli -> prepare("SELECT field1, field2, field3 FROM table WHERE id= ?ORDER BY id ASC")) 
    {
    /* Bind parameters, s - string, b - blob, i - int, etc */
    $stmt -> bind_param("i", $id);
    $stmt -> execute();
    
    /* Bind results */
    $stmt -> bind_result($testfield1, $testfield2, $testfield3);
    
    /* Fetch the value */
    $stmt -> fetch();

    /* Close statement */
    $stmt -> close();
   }
$stmt->store_result();
$stmt->num_rows;
if($stmt = $mysqli -> prepare("SELECT field1, field2, field3 FROM table WHERE id= ? ORDER BY id ASC")) 
    {
    /* Bind parameters, s - string, b - blob, i - int, etc */
    $stmt -> bind_param("i", $id);
    $stmt -> execute();

    /* Bind results */
    $stmt -> bind_result($testfield1, $testfield2, $testfield3);

    /* Fetch the value */
    $stmt -> fetch();
    $numberofrows = $stmt->num_rows;

    /* Close statement */
    $stmt -> close();
   }
echo '# rows: '.$numberofrows;
我知道我应该先保存结果,然后使用num_行,如下所示:

if($stmt = $mysqli -> prepare("SELECT field1, field2, field3 FROM table WHERE id= ?ORDER BY id ASC")) 
    {
    /* Bind parameters, s - string, b - blob, i - int, etc */
    $stmt -> bind_param("i", $id);
    $stmt -> execute();
    
    /* Bind results */
    $stmt -> bind_result($testfield1, $testfield2, $testfield3);
    
    /* Fetch the value */
    $stmt -> fetch();

    /* Close statement */
    $stmt -> close();
   }
$stmt->store_result();
$stmt->num_rows;
if($stmt = $mysqli -> prepare("SELECT field1, field2, field3 FROM table WHERE id= ? ORDER BY id ASC")) 
    {
    /* Bind parameters, s - string, b - blob, i - int, etc */
    $stmt -> bind_param("i", $id);
    $stmt -> execute();

    /* Bind results */
    $stmt -> bind_result($testfield1, $testfield2, $testfield3);

    /* Fetch the value */
    $stmt -> fetch();
    $numberofrows = $stmt->num_rows;

    /* Close statement */
    $stmt -> close();
   }
echo '# rows: '.$numberofrows;
然而,我正在运行,当我把代码放进去的时候,页面出现了问题。我甚至无法进入下一步如何显示行数


在计算准备好的语句中的行数方面,我缺少了什么,那么我如何用一个

使用PDO::query发出一个SELECT COUNT*语句,该语句的谓词与您想要的SELECT语句相同,然后使用PDOStatement::fetchColumn检索将返回的行数。然后,应用程序可以执行正确的操作

num_rows返回数字,必须将其存储在变量中

/*.....other code...*/
$numberofrows = $stmt->num_rows;
/*.....other code...*/

echo '# rows: '.$numberofrows;
所以完整的代码应该是这样的:

if($stmt = $mysqli -> prepare("SELECT field1, field2, field3 FROM table WHERE id= ?ORDER BY id ASC")) 
    {
    /* Bind parameters, s - string, b - blob, i - int, etc */
    $stmt -> bind_param("i", $id);
    $stmt -> execute();
    
    /* Bind results */
    $stmt -> bind_result($testfield1, $testfield2, $testfield3);
    
    /* Fetch the value */
    $stmt -> fetch();

    /* Close statement */
    $stmt -> close();
   }
$stmt->store_result();
$stmt->num_rows;
if($stmt = $mysqli -> prepare("SELECT field1, field2, field3 FROM table WHERE id= ? ORDER BY id ASC")) 
    {
    /* Bind parameters, s - string, b - blob, i - int, etc */
    $stmt -> bind_param("i", $id);
    $stmt -> execute();

    /* Bind results */
    $stmt -> bind_result($testfield1, $testfield2, $testfield3);

    /* Fetch the value */
    $stmt -> fetch();
    $numberofrows = $stmt->num_rows;

    /* Close statement */
    $stmt -> close();
   }
echo '# rows: '.$numberofrows;

如果您只对行计数而不是实际的数据行感兴趣,那么这里有一个完整的查询块,在SELECT子句中有一个count*调用

$conn = new mysqli("host", "user", "pass", "db");
$stmt = $conn->prepare("SELECT COUNT(*) FROM `table` WHERE id= ?");
$stmt->bind_param("s", $id);
$stmt->execute()
$stmt->bind_result($num_rows)
$stmt->fetch()
$num_rows;
或者,如果您想在迭代/处理行之前知道行数,一种方法是将整个resultset多维数组合并到一个变量中,并在迭代之前调用count

$conn = new mysqli("host", "user", "pass", "db");
$sql = "SELECT field1, field2, field3
        FROM table
        WHERE id= ?
        ORDER BY id";
$stmt = $conn->prepare($sql);
$stmt->bind_param("s", $id);
$stmt->execute();
$result = $stmt->get_result();
$resultset = $result->fetch_all(MYSQLI_ASSOC);
echo "<div>Num: " , count($resultset) , "</div>";
foreach ($resultset as $row) {
    echo "<div>Row: {$row['field1']} & {$row['field2']} & {$row['field3']}</div>";
}
*我已经在本地主机上成功测试了上述两个代码片段。

从2020年2月起生效:

从php.net手册:

PDOStatement::rowCount返回受 删除、插入或更新语句

以下是他们网站上的一个链接:

<?php
/* Delete all rows from the FRUIT table */
$del = $dbh->prepare('DELETE FROM fruit');
$del->execute();

/* Return number of rows that were deleted */
print("Return number of rows that were deleted:\n");
$count = $del->rowCount();
print("Deleted $count rows.\n");
?>

在我发布的准备好的声明中,它在哪里?执行之后?在bind_结果之后,还是获取?“这有关系吗?”凯文,我不这么认为。只需确保它在execute之后运行,并且应该是fine哦,顺便问一下,您忘记了两个字符之间的空格了吗?然后点菜。我将更新我的答案以修复that@kp谢谢至少现在还没有出问题。然而,它给了我一个1行的结果,而查询实际上产生了2个结果。你看到我明显遗漏了什么吗?否则,我将把它作为另一个问题深入研究。也谢谢你的帮助,我想这是“$stmt->store_result;”需要在num_rows行之前添加。我建议使用num_rows而不是执行完整语句num_rows是一个不正确的调用,用于与选择COUNT*@Vincent的查询配对。此答案值较低,因为解决方案取决于研究人员必须离开才能查看解决方案。OP不是从删除中询问受影响的行查询这是另一个问题的正确答案。