WordPress中$wpdb->get_row返回NULL致属性获取报错求助
排查WordPress数据库查询返回NULL的问题
之前正常运行数月的代码,原本能返回食谱名称:
if ( isset( $_GET['id'] ) { $recipe_name = $wpdb->get_row("SELECT * FROM " . $table_name . " WHERE ID =".$id); echo $recipe_name->recipe_name; }
现在执行时抛出错误:
Notice: Trying to get property 'recipe_name' of non-object in .... on line 48
执行var_dump ($recipe_name);返回NULL,但数据库中对应ID的数据确实存在,且recipe_name字段不为空。改成echo $recipe_name['recipe_name'];后又出现新错误:
Notice: Trying to access array offset on value of type null in.....
问题原因排查:
- 变量未赋值:代码里直接用了
$id,但没把$_GET['id']的值赋给它,导致SQL语句里的ID是未定义的空值,自然查不到数据返回NULL。 - 语法错误:原代码的
if ( isset( $_GET['id'] )少了一个闭合括号),语法错误可能导致后续逻辑执行异常。 - SQL拼接风险与错误:直接把
$id拼进SQL语句,不仅有SQL注入风险,若$_GET['id']不是纯数字,还会导致SQL语法错误,查询失败返回NULL。
修复后的代码示例:
if ( isset( $_GET['id'] ) ) { // 补全闭合括号 $id = intval($_GET['id']); // 转成整数,避免注入和类型问题 // 使用wpdb的prepare方法安全拼接SQL $recipe_name = $wpdb->get_row($wpdb->prepare( "SELECT recipe_name FROM %s WHERE ID = %d", $table_name, $id )); // 先判断查询结果是否存在,再输出 if ($recipe_name) { echo $recipe_name->recipe_name; } }
内容的提问来源于stack exchange,提问作者Thermal Mermaid
相关产品推荐
相关产品推荐

