You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP7.1调用mysqli_stmt_get_result()报未定义函数错误如何解决

错误根因

Call to undefined function mysqli_stmt_get_result() 报错是因为你的PHP 7.1环境没有启用*mysqlnd(MySQL Native Driver)*扩展,mysqli_stmt_get_result() 函数必须依赖这个扩展才能运行,如果你使用的是旧版libmysqlclient驱动、或者服务器默认没开这个扩展就会触发该错误。

另外你的代码本身存在逻辑冗余:同时调用了mysqli_query普通查询和mysqli_stmt预处理,后面遍历结果用的是普通查询返回的$res,预处理逻辑完全没有实际作用,也可以直接优化。


可用解决方案

方案1:启用mysqlnd扩展(优先)

  • 自主管理的服务器:在PHP管理面板的扩展列表中找到mysqlnd、mysqli(选择基于mysqlnd编译的版本),勾选启用后重启PHP服务即可;Windows环境则修改php.ini,删除extension=php_mysqli.dll前的注释,重启服务生效。
  • 虚拟主机环境:联系主机服务商协助开启mysqlnd扩展支持。

方案2:修改代码绕过扩展依赖(不需要改服务器配置)

简化写法(删除无用的预处理逻辑)

<?php
    $sqlprodutos = "SELECT * FROM produtos WHERE categoria = 'Carrinhos de Cliente' ORDER BY ordem ASC";
    $res = mysqli_query($con, $sqlprodutos);

    if (!$res) {
        echo "Erro. Por favor, tente novamente mais tarde.";
    } else {
        if(mysqli_num_rows($res) == 0){
?>
        <div class="col-12 mb-3">
                      <h3 class="text-center">Ops! Nenhum produto foi encontrado.</h3>
                      <br>
                    </div>
                  </div>
<?php
        } else{
            while($scprodutos = mysqli_fetch_array($res)){
    
                $id_produto        = $scprodutos['id'];
                $nome_produto      = utf8_encode($scprodutos['nome']);
                $tipo_produto      = utf8_encode($scprodutos['tipo']);
                $imagem_produto    = $scprodutos['imagem'];

                $link_produto = preg_replace('/[ -]+/' , '-' , $nome_produto);
?>
        <div class="col-6 col-md-3 mb-3">
        <a href="produto.php?p=<?php echo $link_produto; ?>&id=<?php echo $id_produto; ?>" class="text-decoration-none">
            <div class="card mb-5 h-100 shadow-sc">
              <img src="assets/img/produtos/<?php echo $imagem_produto; ?>" class="card-img-top my-3" alt="<?php echo $nome_produto; ?> - <?php echo $tipo_produto; ?>">
              <div class="card-body product">
                <h5 class="card-title text-uppercase text-center"><?php echo $nome_produto; ?></h5>
                <div class="bottom">
                    <h6 class="card-subtitle mb-2 text-muted text-uppercase text-center"><?php echo $tipo_produto; ?></h6>
                    <div class="d-grid gap-2 mb-4">
                        <a href="produto.php?p=<?php echo $link_produto; ?>&id=<?php echo $id_produto; ?>" class="btn btn-dark">Ver detalhes</a>
                    </div>
                </div>
              </div>
            </div>
        </a>
        </div>
<?php
            }
        }
    }
?>

预处理写法(需要防SQL注入时使用,不依赖mysqlnd)

用mysqli_stmt_bind_result()绑定变量的方式替代mysqli_stmt_get_result()即可:

<?php
    $sqlprodutos = "SELECT id, nome, tipo, imagem FROM produtos WHERE categoria = 'Carrinhos de Cliente' ORDER BY ordem ASC";
    $stmtprodutos = mysqli_stmt_init($con);

    if (!mysqli_stmt_prepare($stmtprodutos, $sqlprodutos)) {
        echo "Erro. Por favor, tente novamente mais tarde.";
    } else {
        mysqli_stmt_execute($stmtprodutos);
        // 绑定结果变量,顺序和SELECT查询的字段顺序保持一致
        mysqli_stmt_bind_result($stmtprodutos, $id_produto, $nome_produto, $tipo_produto, $imagem_produto);
        
        if (!mysqli_stmt_fetch($stmtprodutos)) {
?>
        <div class="col-12 mb-3">
                      <h3 class="text-center">Ops! Nenhum produto foi encontrado.</h3>
                      <br>
                    </div>
                  </div>
<?php
        } else {
            // 已经提前fetch过一次判断结果,先输出第一条再循环剩余数据
            do {
                $nome_produto = utf8_encode($nome_produto);
                $tipo_produto = utf8_encode($tipo_produto);
                $link_produto = preg_replace('/[ -]+/' , '-' , $nome_produto);
?>
        <div class="col-6 col-md-3 mb-3">
        <a href="produto.php?p=<?php echo $link_produto; ?>&id=<?php echo $id_produto; ?>" class="text-decoration-none">
            <div class="card mb-5 h-100 shadow-sc">
              <img src="assets/img/produtos/<?php echo $imagem_produto; ?>" class="card-img-top my-3" alt="<?php echo $nome_produto; ?> - <?php echo $tipo_produto; ?>">
              <div class="card-body product">
                <h5 class="card-title text-uppercase text-center"><?php echo $nome_produto; ?></h5>
                <div class="bottom">
                    <h6 class="card-subtitle mb-2 text-muted text-uppercase text-center"><?php echo $tipo_produto; ?></h6>
                    <div class="d-grid gap-2 mb-4">
                        <a href="produto.php?p=<?php echo $link_produto; ?>&id=<?php echo $id_produto; ?>" class="btn btn-dark">Ver detalhes</a>
                    </div>
                </div>
              </div>
            </div>
        </a>
        </div>
<?php
            } while(mysqli_stmt_fetch($stmtprodutos));
        }
        mysqli_stmt_close($stmtprodutos);
    }
?>

内容的提问来源于stack exchange,提问作者poteitow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 21:06:04