WordPress使用Woody代码片段插件调用数据库出现警告问题求助
解决WordPress中Woody代码片段插件执行数据库查询时的mysqli警告问题
你遇到的核心问题是WordPress的执行作用域和纯PHP环境存在差异:虽然你在代码开头定义了$conn,还在函数里用了global $conn,但Woody插件会把你的代码包裹在局部作用域中执行,导致$conn并没有真正成为全局变量,函数里的$conn实际是null,这才触发了那些警告。
下面给你两种解决方案,优先推荐第一种(符合WordPress官方规范):
方案一:使用WordPress内置的$wpdb类(推荐)
WordPress自带了专门的数据库操作类$wpdb,它已经帮你处理了数据库连接、安全防护和环境兼容问题,完全不需要手动连接数据库。如果你的products表属于WordPress数据库的一部分,用这个方法最稳妥:
function getPosts() { // 引入WordPress内置的数据库全局对象 global $wpdb; // 注意:如果你的表是WordPress数据库的一部分,记得加上表前缀(默认是wp_) // 若为独立外部数据库,可跳过前缀直接写表名 $products = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}products"); $counter = 1; foreach ($products as $product) { $pro_title = $product->product_title; echo "<b>$counter. $pro_title</b><br>"; $counter++; } } getPosts();
方案二:修复当前的全局变量问题(应急可用,不推荐)
如果你的products表是独立的外部数据库,必须手动连接的话,把连接逻辑放到函数内部,避免依赖全局变量的作用域问题,同时加上错误处理方便调试:
function getPosts() { // 直接在函数内部建立数据库连接 $conn = mysqli_connect("localhost", "root", "", "myshop"); // 先检查连接是否成功 if (!$conn) { echo "数据库连接失败: " . mysqli_connect_error(); return; } $get_products = "SELECT * FROM products"; $run_products = mysqli_query($conn, $get_products); // 检查查询是否成功 if (!$run_products) { echo "查询执行失败: " . mysqli_error($conn); mysqli_close($conn); return; } $counter = 1; while ($row_products = mysqli_fetch_array($run_products)) { $pro_title = $row_products['product_title']; echo "<b>$counter. $pro_title</b><br>"; $counter++; } // 记得关闭数据库连接 mysqli_close($conn); } getPosts();
为什么本地纯PHP环境没问题?
在纯PHP脚本里,你定义的$conn是全局变量,函数里用global $conn就能直接访问到;但WordPress的插件代码会被包裹在插件的执行函数中,你的$conn实际是局部变量,global $conn自然找不到它,所以才出现了null相关的警告。
内容的提问来源于stack exchange,提问作者khan Only
相关产品推荐
相关产品推荐

