PHP报错:Call to undefined function mysqli_result() 代码修改咨询
解决PHP Fatal error: Call to undefined function mysqli_result()的问题
首先,这个报错的核心原因很明确:mysqli扩展里根本没有mysqli_result()这个函数——它是旧版mysql扩展里的函数,而mysql扩展早在PHP 5.5就被废弃,PHP 7之后直接移除了,所以现在用mysqli的话肯定会报这个错。
直接修改报错代码段
原代码里触发报错的这一行:
return mysqli_result($sql, 0, "percentage");
可以替换成以下两种更稳妥的方式:
方式1:用mysqli_fetch_assoc()获取关联数组(推荐)
这种方式直接拿到包含字段名的数组,取值逻辑清晰,不依赖字段顺序:
$row = mysqli_fetch_assoc($sql); return $row['percentage'];
方式2:用mysqli_fetch_row()获取索引数组
如果习惯用字段的索引位置取值,也可以这么写(注意索引从0开始,需要确认percentage是结果集中的对应位置):
$row = mysqli_fetch_row($sql); return $row[2]; // 假设percentage是结果集中的第3个字段
额外优化:解决SQL注入风险
原代码里直接把用户输入的$code拼进SQL语句,哪怕有filter()函数,也存在SQL注入隐患。建议改用预处理语句,既安全又高效:
// 替换原有的$sql查询语句 $stmt = mysqli_prepare($con, "SELECT percentage FROM orders_discounts WHERE codex = ? AND expiry > ? AND status = 1 AND ? > discount_offer"); mysqli_stmt_bind_param($stmt, "sii", $code, $now, $total); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); // 检查结果行数 if (mysqli_stmt_num_rows($stmt) == 0) { return "Invalid coupon code. Please try again."; } else { $row = mysqli_fetch_assoc($result); return $row['percentage']; }
修改后的完整代码
<?php include 'client_config.php'; foreach($_GET as $key => $value) { $get[$key] = filter($value); } $total = base64_decode($_GET['total']); echo calculate_discount($_GET['code'],$total); function calculate_discount($code, $total) { global $con; if ($code && $total) { $now = time(); list($discount_offer_on_totals) = mysqli_fetch_row(mysqli_query($con, "select discount_offer from orders_discounts")); if ( $total < $discount_offer_on_totals ) { return "Order total must be ".$curr_symbol. ' '. $discount_offer_on_totals." or more to qualify for discount!"; } // 改用预处理语句,避免注入同时解决mysqli_result报错 $stmt = mysqli_prepare($con, "SELECT percentage FROM orders_discounts WHERE codex = ? AND expiry > ? AND status = 1 AND ? > discount_offer"); mysqli_stmt_bind_param($stmt, "sii", $code, $now, $total); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); if (mysqli_stmt_num_rows($stmt) == 0) { return "Invalid coupon code. Please try again."; } else { $row = mysqli_fetch_assoc($result); return $row['percentage']; } } else { return "Invalid request! Please enter correct code. "; } } ?>
内容的提问来源于stack exchange,提问作者Anthony Muchangi
相关产品推荐
相关产品推荐

