php - 调用非对象成员函数

标签 php mysql sql

我刚开始接触 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/

相关文章:

mysql - 复合 Mysql join sql 中每组所需的最大 n

sql - 是否可以在SQL中使用if/then/when这样的条件语句?

php - 使用学说选择日期时间之间的行

php - PDO::FETCH_ASSOC 不返回值。我对不同的方法感到困惑,你能帮我解决吗?

MySQL 组 - 跨 3 个表获取数据

mysql - 替代 Pdo 查询的 quoteInto 方法

python - Django MySql,外键查询

php - 选择并回显所有表格(无论它是什么)

php - Mysqli 无法获取信息或bind_params

mysql - 将mysql DDL转换为sqlite DDL的最佳工具是什么?