【问题标题】:PDO Fetch statement only retrieves first columnPDO Fetch 语句只检索第一列
【发布时间】:2013-09-30 11:34:16
【问题描述】:

正如标题所述,我只能获取 id 列,其他列出现未定义索引错误。

我的代码:

if(isset($_SESSION['id'])) {
    $presh = $_SESSION['id'];
    $stmt = $pdo->prepare("SELECT id FROM users WHERE id = :id");
    $id = $presh;
    $stmt->execute(array(':id'=>$id));
    $accountinfo = $stmt->fetch(PDO::FETCH_ASSOC);
}

稍后在我的代码中我这样引用它:

Karma <span id="kcurrent"><?php echo $accountinfo["karmacurrent"]; ?></span> | <span id="ktotal"><?php echo $accountinfo["karmatotal"]; ?></span>

这些行确实存在并且它们已被填充,我做错了什么?

【问题讨论】:

    标签: php mysql pdo


    【解决方案1】:

    您只能选择id 列,因为这是您在查询中的全部内容。

    试试这样的

    if (isset($_SESSION['id'])) {
        $presh = $_SESSION['id'];
        $stmt = $pdo->prepare("SELECT id, karmacurrent FROM users WHERE id = :id");
    
        $id = $presh;
    
        $stmt->execute(
            array(
                ':id'=>$id
            )
        );
    
        $accountinfo = $stmt->fetch(PDO::FETCH_ASSOC);
    }
    

    基本上,您只是从表中检索ID,而不是从其他列中检索。

    【讨论】:

    • 拍,只需要将SQL查询修改为SELECT *,
    • @0n35 获取列时最好不要使用 *,而是按名称选择列,例如- 从 table_name 中选择 column1、column2、column3。
    • @Darren 你能解释一下为什么吗?
    • @inetphantom 因为它可能会给您的查询增加不必要的加载时间,尤其是在查询很大的情况下。想象一下,如果您去商店只想买一些牛奶,但您使用了“全部购买”(*) 选择,这会使查询变得相当大,不是吗?你应该只选择你需要的,而不是你可以访问的!
    猜你喜欢
    • 1970-01-01
    • 2011-11-30
    • 2019-07-22
    • 2016-01-19
    • 2017-04-17
    • 2012-03-06
    • 2014-01-12
    • 2012-06-18
    相关资源
    最近更新 更多