从WooCommerce数据库查询数据时出现mysqli_fetch_assoc错误
嘿,这个错误其实很好定位——你在调用结果集方法的时候混淆了mysqli的面向对象风格和过程化风格语法!
错误原因
从报错信息Call to undefined method mysqli_result::mysqli_fetch_assoc()可以看出,你试图把过程化的函数mysqli_fetch_assoc()当作mysqli_result对象的方法来调用,但这个方法根本不存在:
- 过程化风格里,应该写成
mysqli_fetch_assoc($result) - 面向对象风格里,应该调用对象的
fetch_assoc()方法,也就是$result->fetch_assoc()
你的代码里用了$result->mysqli_fetch_assoc(),这是两种风格的错误混搭,所以才会触发“未定义方法”的致命错误。
修正后的代码
把循环里的方法调用改成正确的面向对象写法:
function prntPage() { //Connect is defined somewhere else $query = "SELECT * FROM `wp_woocommerce_order_items`"; $result = mysqli_query($conn,$query); while($row = $result->fetch_assoc()) { // 这里改成fetch_assoc() echo "id: " . $row["order_item_id"]. " - Product Name: " . $row["order_item_name"]. " - Order_ID" . $row["order_id"]. "<br>"; } }
额外建议(WordPress最佳实践)
在WordPress插件开发中,不推荐直接使用原生mysqli操作数据库,WordPress内置了$wpdb类,它已经帮你处理了表前缀适配、数据安全(比如转义)等问题,用起来更安全也更灵活。比如你的查询可以改成这样:
function prntPage() { global $wpdb; $table_name = $wpdb->prefix . 'woocommerce_order_items'; // 自动适配表前缀 $results = $wpdb->get_results( "SELECT * FROM $table_name", ARRAY_A ); foreach($results as $row) { echo "id: " . $row["order_item_id"]. " - Product Name: " . $row["order_item_name"]. " - Order_ID" . $row["order_id"]. "<br>"; } }
这样即使你的WordPress站点用了自定义表前缀(不是默认的wp_),代码也能正常工作,同时$wpdb会自动帮你处理SQL注入风险。
错误信息回顾:
Fatal error: Uncaught Error: Call to undefined method mysqli_result::mysqli_fetch_assoc() in C:\xampp\htdocs\ExamenProject\wp-content\plugins\drukkebaasjes-sizedata\drukkebaasjes-sizedata.php:54 Stack trace: #0 C:\xampp\htdocs\ExamenProject\wp-includes\class-wp-hook.php(286): prntPage('') #1 C:\xampp\htdocs\ExamenProject\wp-includes\class-wp-hook.php(310): WP_Hook->apply_filters('', Array) #2 C:\xampp\htdocs\ExamenProject\wp-includes\plugin.php(453): WP_Hook->do_action(Array) #3 C:\xampp\htdocs\ExamenProject\wp-admin\admin.php(224): do_action('toplevel_page_p...') #4 {main} thrown in C:\xampp\htdocs\ExamenProject\wp-content\plugins\drukkebaasjes-sizedata\drukkebaasjes-sizedata.php on line 54
内容的提问来源于stack exchange,提问作者AquaProgramming

