WordPress开发报错:Warning: Undefined property: wpdb::$questions
问题解决:Undefined property: wpdb::$questions
错误原因分析
这个警告由代码里的几个关键问题导致:
- SQL语句中表名拼接错误,
. $table_name .的写法会引发SQL解析异常,WordPress的wpdb类因此误判你要访问它的$questions属性 - SQL里使用了表别名
q,但没有给questions表定义该别名 - SELECT语句仅查询了
uniq_name和short_question,但循环中却尝试访问$details->id,这还会触发额外的未定义属性错误 - 代码结构混乱:foreach循环内重复输出table标签,且存在多余的闭合大括号
修正后的代码
// Show the open questions echo '<div style="overflow-x: auto;">'; echo "<br>Open Vragen<br>"; global $wpdb; $table_name = $wpdb->prefix . "questions"; // 加上WordPress表前缀,避免表名冲突 // 修正SQL语句,定义表别名,查询需要的字段 $myrows = $wpdb->get_results( "SELECT `id`, `uniq_name`, `short_question` FROM `$table_name` AS q WHERE q.status = 'open' ORDER BY q.id DESC" ); // 先输出表格头部,再循环填充内容 echo "<table><TR><TH>Vragen </TH><TH>Beantwoord </TH><TH>Niet Beantwoord </TH></TR>"; foreach ($myrows as $details) { echo "<TR>"; echo "<TD>" . $details->id . "</TD>"; echo "<TD>" . $details->short_question . "</TD>"; // 根据实际需求补充其他列内容 echo "<TD></TD>"; echo "</TR>"; } echo "</table>"; echo '</div>';
关键修正点
- 表名规范:用
$wpdb->prefix拼接自定义表名,符合WordPress开发规范,同时用反引号包裹表名避免语法错误 - SQL语句:给表添加别名
AS q,保证WHERE和ORDER BY中的别名引用有效 - 字段补全:在SELECT中加入
id字段,匹配循环里要访问的$details->id - 结构优化:将table标签和表头移到循环外,避免重复创建表格,同时清理多余的闭合括号
内容的提问来源于stack exchange,提问作者Shady Morsi
相关产品推荐
相关产品推荐

