我从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);
当我进入我的页面时,我有错误: 致命错误:在非对象上调用成员函数fetchAll()
在我看来,我只想写下:
<h2 id="member-<?= $member['id'] ?>">
<?= avatar_tag($member,'30x30') ?>
<a href="<?=member_url_for($member)?>"><?=$member['firstname']?><small> <?= $member['lastname'] ?></small></a>
</h2>
我不明白这个错误,任何人都可以帮助我吗?
感谢您的帮助。
答案 0 :(得分:2)
不要像往常一样将呼叫链接到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注入攻击。你想要做的是使用准备好的陈述。
$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();
答案 1 :(得分:0)
在你的SQL查询中
'SELECT * FROM members WHERE interest = $current_members["interest"] ORDER BY lastname, firstname'
你正在使用单引号,所以$ current_members [“interest”]实际上没有解析为PHP变量,它是一个字符串。您可以切换单引号和双引号:
在这里进行编辑,传递数组偏移并不幸运:
$interest = $current_members['interest'];
"SELECT * FROM members WHERE interest = $interest ORDER BY lastname, firstname"
不幸的是,您没有共享任何底层数据库代码,但假设选项('db')是一个pdo对象,这应该可以正常工作。
如果option('db')确实是pdo,则在执行任何语句之前添加:
option('db') -> setAttribute( \PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION );
这会告诉你确切的错误
答案 2 :(得分:0)
“对非对象调用成员函数”错误意味着您正在尝试对不代表对象的变量调用方法。
您在$ members_all denifition上有一个接一个地调用以下方法: 选项( 'DB') - &GT;查询( “...”) - &GT;使用fetchall();
使用某些SQL查询调用任何返回选项('db')的方法“query”,然后调用fetchAll()方法返回“query”方法返回的任何内容。
我不知道自己是否解释得很好,主要的一点是当你执行查询方法时它会返回一些没有“fetchAll”方法的东西,在你的情况下你的SQL是错误,可能query()返回NULL或FALSE而不是结果集。
用双引号更改单引号或连接$ current_member ['interest']变量。