Hostinger服务器中WordPress用户表数据无法获取问题求助
问题
我用以下PHP脚本从WordPress的users表中获取用户ID,该脚本在本地服务器及其他服务器都能正常运行,但在Hostinger服务器上失效。执行print_r($query)有输出,却无法通过$userid=$query[0][ID]获取到ID值,请问原因是什么?
<?php if (sanitize_text_field($_GET['ven_search_title']) && sanitize_text_field ($_GET['ven_search_title'])) { $ven_search_title = sanitize_text_field($_GET['ven_search_title']); } global $wpdb; $table = $wpdb->prefix . 'users'; $query = $wpdb->get_results("SELECT * FROM $table WHERE user_nicename LIKE '%".$ven_search_title."%'", ARRAY_A); if($query){ echo "<pre>"; print_r ($query); echo "</pre>"; $userid=$query[0][ID]; echo "<pre>"; print_r ($query[0][ID]); echo "</pre>"; ?> <?php $user=get_userdata($userid)?> <a href="<?php echo bloginfo('url').'/store/'.$user->user_nicename; ?>"> <div class="store-wrappers"> <div class="seller-avatar"><?php echo get_avatar($userid) ?></div> <div class="storebody"> <div class="search_title"><span>Store Name:</span> <?php echo $user->user_nicename; ?> </div> </div> <div style="clear:both;"></div>
原因分析与解决办法
- 数据库大小写敏感差异:Hostinger服务器的数据库大概率开启了大小写敏感模式(比如MySQL使用
utf8_bin这类区分大小写的排序规则),而本地或其他服务器用的是不区分大小写的规则(如utf8_general_ci)。WordPress的users表主键字段如果实际是小写id,那在Hostinger上必须用$query[0]['id']才能取值,而你写的$query[0][ID]会因为大小写不匹配取不到值。 - 数组键名未加引号:你直接用
ID作为数组键名,PHP会把它当成未定义常量处理,自动转为字符串'ID',但部分服务器的PHP配置对未定义常量的处理更严格,可能导致解析异常。正确写法应该给键名加引号:$query[0]['ID'](如果字段是大写)或$query[0]['id'](如果是小写)。 - 字段名实际大小写不符:不同WordPress安装环境下,数据库字段名可能存在大小写差异,你可以通过查看
print_r($query)输出的数组键名,确认主键字段是id还是ID,然后对应调整取值代码。
修改示例
把原来的$userid=$query[0][ID];替换为以下代码:
// 先确认键名再取值,兼容不同环境 if (isset($query[0]['id'])) { $userid = $query[0]['id']; } elseif (isset($query[0]['ID'])) { $userid = $query[0]['ID']; } else { // 处理取不到ID的情况 $userid = 0; }
内容的提问来源于stack exchange,提问作者Rashed khan
相关产品推荐
相关产品推荐

