【发布时间】:2016-08-02 11:07:17
【问题描述】:
我有一个脚本可以从 matieres 和 sous_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->bind_result() 和里面的变量。至于普通的 mySQLi 查询(没有连接),我必须在 $stmt->bind_result() 中将选定的列名声明为变量
【问题讨论】:
-
我认为
$mysqli->query()已经返回了执行的语句(除非奇怪的包装器)。调用->execute()可能会做您不打算做的事情...另外...如果您执行...实际上捕获返回值以进行调试。 (反正我不确定,你为什么要改用mysqli)