从MySQL查询结果中提取值——Xamarin.Forms社交应用开发问题
解决Xamarin.Forms社交应用中提取关联用户信息的问题
看起来你遇到的麻烦是因为用了SELECT *查询,导致posts和users表的同名列(比如id)在结果数组里出现了重复的键(既有关联键又有数字索引),这让你没法顺畅提取用户名这类需要的字段。我给你两个解决方案,优先推荐第一个更稳妥的方式:
方案1:优化SQL查询(推荐)
别再用SELECT *了,明确指定你需要的列,给同名列起别名,这样结果数组的键会清晰唯一,完全不用纠结索引的问题。比如你需要帖子内容、发布时间,以及用户的用户名,SQL可以这么写:
SELECT P.id AS post_id, P.body, P.timestamp, U.id AS user_id, U.username -- 这里替换成你users表中实际的用户名列名,比如name/account_name FROM posts AS P INNER JOIN users AS U ON U.id = P.user_id WHERE P.user_id=:userid
执行这个查询后,你就能直接通过关联键轻松取值了:
$postData = $results[0]; $username = $postData['username']; // 直接拿到用户名 $postContent = $postData['body']; $postTime = $postData['timestamp'];
方案2:从现有查询结果临时取值(不推荐)
如果暂时不想修改SQL,你可以先确认结果数组里的键对应关系——比如先打印所有键:
print_r(array_keys($results[0]));
假设users表的用户名对应的关联键是username(这个列名在两个表中不重复),那你可以直接这么取:
$username = $results[0]['username'];
但这种方式很脆弱,一旦表结构(列名、顺序)变化,代码就会出错,所以还是优先用方案1。
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

