【问题标题】:Results not showing after converting PDO query to mySQLi将 PDO 查询转换为 mySQLi 后未显示结果
【发布时间】:2016-08-02 11:07:17
【问题描述】:

我有一个脚本可以从 matieressous_matieres 两个表中提取数据,但它是为 PDO 编写的,我需要它来为 mySQLi 工作: p>

$stmt = $pdo->query('SELECT 
                        m.id AS m_id, m.url AS m_url, m.title AS m_title, 
                        s.id AS s_id, s.url AS s_url, s.title AS s_title
                     FROM matieres m
                     INNER JOIN sous_matieres s ON m.url = s.parent');

while ($row = $stmt->fetchObject()) {
    $matieres[$row->m_id]['url'] = $row->m_url;
    $matieres[$row->m_id]['title'] = $row->m_title;
    $matieres[$row->m_id]['sous_matieres'][$row->s_id] = $row;
}

foreach ($matieres as $m_id => $matiere) {
    echo "<h2>$matiere[title]</h2>";
    foreach ($matiere['sous_matieres'] as $id => $sm) {
        echo "<div>
                  <a href='{$sm->s_url}'>{$sm->s_title}</a>
              </div>";
    }
}

我的新 mySQLi 代码尽管两个表有数据但什么也没显示:

$query = 'SELECT 
              m.id AS m_id, m.url AS m_url, m.title AS m_title, 
              s.id AS s_id, s.url AS s_url, s.title AS s_title
          FROM matieres m
          INNER JOIN sous_matieres s ON m.url = s.parent';
$stmt = $mysqli->query($query);
$stmt->execute();
$stmt->store_result();

while ($row = $stmt->fetch()) {
    $matieres[$row->m_id]['url'] = $row->m_url;
    $matieres[$row->m_id]['title'] = $row->m_title;
    $matieres[$row->m_id]['sous_matieres'][$row->s_id] = $row;
}

foreach ($matieres as $m_id => $matiere) {
    echo "<h2>$matiere[title]</h2>";
    foreach ($matiere['sous_matieres'] as $id => $sm) {
        echo "<div>
                  <a href='{$sm->s_url}'>{$sm->s_title}</a>
              </div>";
    }
}

我不知道它是否缺少$stmt-&gt;bind_result() 和里面的变量。至于普通的 mySQLi 查询(没有连接),我必须在 $stmt-&gt;bind_result() 中将选定的列名声明为变量

【问题讨论】:

  • 我认为$mysqli-&gt;query() 已经返回了执行的语句(除非奇怪的包装器)。调用-&gt;execute() 可能会做您不打算做的事情...另外...如果您执行...实际上捕获返回值以进行调试。 (反正我不确定,你为什么要改用mysqli)

标签: php mysqli pdo


【解决方案1】:

mysqli_stmt::fetch 用于将变量绑定到准备好的语句的结果以填充这些变量。获取结果的另一种方法是使用 mysqli_result 类,您可以按照您尝试的方式使用它:

$result = $mysqli->query($query);

while ($row = $result->fetch_object()) {
    $matieres[$row->m_id]['url'] = $row->m_url;
    $matieres[$row->m_id]['title'] = $row->m_title;
    $matieres[$row->m_id]['sous_matieres'][$row->s_id] = $row;
}

参见http://php.net/manual/en/mysqli.query.phphttp://php.net/manual/en/class.mysqli-result.php

【讨论】:

  • 抱歉,$result->fetchObject() 是一个有效的 mySQLi 函数吗?我认为它只是 PDO,它相当于 $result->fetch() for mySQLi
  • 此类问题最好参考手册,可以清楚直接的回答。我已经为您链接到上面的相关页面。
  • 显示错误时:致命错误:调用未定义方法mysqli_stmt::fetchObject()
  • 你确定你使用的是返回值$mysqli-&gt;query()...?
  • 啊,该死的错字。看,这就是你应该使用 RTFM 的原因! ;-P
猜你喜欢
  • 1970-01-01
  • 2012-09-20
  • 1970-01-01
  • 1970-01-01
  • 2014-10-24
  • 1970-01-01
  • 2015-01-25
  • 1970-01-01
  • 2019-12-19
相关资源
最近更新 更多