【问题标题】:How to show column values with PDO prepared statement如何使用 PDO 准备语句显示列值
【发布时间】:2017-06-30 20:06:56
【问题描述】:

我是 PDO 新手,但似乎不知道如何返回值

$stmt = $pdo->prepare('SELECT * FROM categories WHERE categories_url = ?');
$stmt->execute([$url]);
if($stmt->fetchColumn()>0) {
    $row = $stmt->fetch();
    echo $row['categories_name'];
    echo 'test';
}

“测试”回声正常,但 $row 值不显示。我也试过print_r($row),没有任何显示。我以为我需要使用 fetch() 方法设置 $row 变量,这不对吗?这里有什么问题?

** 更新 **

我删除了 fetchColumn 的 if 语句,它可以工作,这是为什么呢? fetchColumn 方法在 fetch() 之前有没有关系?

如果是的话,只有有结果的情况下如何设置$row变量?

【问题讨论】:

  • fetchColumn 会将结果指针移动到下一行,fetch 将再次执行此操作,如果您只有 1 个结果,那么 fetch 将不会从 fetch 获取任何内容。跨度>
  • 哦!那么如何显示值,只有当有任何结果?
  • if (($row = $stmt->fetch()) != null) { /* show stuff */ }

标签: php mysql pdo prepared-statement


【解决方案1】:

使用fetch(PDO::FETCH_ASSOC),然后通过名称访问您想要的元素。

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    echo $row['categories_name'];
}

【讨论】:

    【解决方案2】:

    我认为 execute 需要一个像

    这样的数组
     $sth->execute(array($calories, $colour));
    

    只需在php.net 上关注一些示例

    /* Execute a prepared statement by passing an array of insert values */
    $calories = 150;
    $colour = 'red';
    $sth = $dbh->prepare('SELECT name, colour, calories
        FROM fruit
        WHERE calories < ? AND colour = ?');
    $sth->execute(array($calories, $colour));
    

    如果多行,请尝试 fetchAll 而不是 fetch

    【讨论】:

    • $url 是一个变量,它是 [] 内的一个数组
    猜你喜欢
    • 2021-02-23
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    • 2016-12-30
    • 2014-03-10
    • 1970-01-01
    • 2021-04-24
    相关资源
    最近更新 更多