如何在PHP mail()中正确访问SQL查询返回的数组数据
如何在PHP中正确访问从MySQL查询返回的关联数组键值?
你遇到的问题核心在于数据类型不匹配——你以为查询返回的是对象,但实际上是关联数组,所以用对象的->语法自然取不到值。
问题根源
你的代码里用了fetch_assoc()方法来获取查询结果:
while($row = $result->fetch_assoc()) { $aData[] = $row; }
fetch_assoc()的作用是把查询结果的每一行转换成以数据库字段名为键的关联数组,而不是stdClass对象。这就是为什么json_encode($aData[0])能正常输出(数组可被JSON序列化),但$aData[0]->id会报错或取不到值的原因。
解决方案
把对象访问语法换成关联数组的键访问语法即可:
修改你的sendEmail函数,将所有$aData[0]->xxx替换为$aData[0]['xxx']:
function sendEmail(&$aData){ $to = $aData[0]['contact_email']; $subject = $aData[0]['id']; $txt = "Something something ".$aData[0]['contact'].", something something. "; $headers = "From: email@email.com" . "\r\n" . "BCC: email@email.com"; mail($to,$subject,$txt,$headers); }
额外选项:如果想使用对象语法
如果你更习惯用->来访问属性,可以把fetch_assoc()换成fetch_object(),这样返回的每一行就是一个stdClass对象,原有的->语法就能正常工作:
while($row = $result->fetch_object()) { $aData[] = $row; }
这种情况下,你原来的sendEmail函数代码就不需要修改了。
内容的提问来源于stack exchange,提问作者user8840875
相关产品推荐
相关产品推荐

