我刚开始接触 PHP,需要你的帮助。
我创建了一个尝试,列出与 current_member 有相同兴趣的所有成员(我的意思是连接的成员)。
我这样写:
$current_members = params('current_member');
$members_all = option('db')->query('SELECT * FROM members WHERE interest = $current_members["interest"] ORDER BY lastname, firstname')->fetchAll();
set('members_all', $members_all);
当我进入我的页面时,出现错误: fatal error :在非对象上调用成员函数 fetchAll()
在我看来,我只是写这个:
<h2 id="member-<?= $member['id'] ?>">
<?= avatar_tag($member,'30x30') ?>
<a href="<?=member_url_for($member)?>"><?=$member['firstname']?><small> <?= $member['lastname'] ?></small></a>
</h2>
我不明白这个错误,有人可以帮助我吗?
感谢您的帮助。
最佳答案
不要像您正在做的那样链接调用 query()
和 fetchAll()
。这是不好的做法。永远不要假设您的查询有效,始终检查它是否有效。
$db = option('db');
$query = $db->query('SELECT ...');
if($query === FALSE){
print_r($db->errorInfo());
die;
}
$members_all = $query->fetchAll();
(由于您正在调用 fetchAll()
,我假设您正在使用 PDO(而不是 MySQLi))
此外,请勿尝试将变量连接到 SQL 查询中。 (P.S. 你甚至没有这样做,你使用的是单引号,所以 $current_members["interest"]
不会被读取为变量)这只是要求 SQL 注入(inject)攻击。您想要做的是使用准备好的语句。
$db = option('db');
$query = $db->prepare('SELECT * FROM members WHERE interest = ? ORDER BY lastname, firstname');
$exec = $query->execute(array($current_members['interest']));
if($exec === FALSE){
print_r($query->errorInfo());
die;
}
$members_all = $query->fetchAll();
关于php - 调用非对象成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24315517/