我正在尝试在 ModX Revo 的片段中查询数据库:
<?php
$leadersql = "SELECT * FROM `modx_menus`";
$result = mysql_query($leadersql);
while ($row = mysql_fetch_array($result)) {
echo "hello";
};
?>
在 Evo 上,这工作正常,但在 Revo 中没有返回任何内容。
我需要进行不同的设置吗?
我正在尝试在 ModX Revo 的片段中查询数据库:
<?php
$leadersql = "SELECT * FROM `modx_menus`";
$result = mysql_query($leadersql);
while ($row = mysql_fetch_array($result)) {
echo "hello";
};
?>
在 Evo 上,这工作正常,但在 Revo 中没有返回任何内容。
我需要进行不同的设置吗?
Christian 的代码确实有效,您可能需要先定义 $rows 数组:
$leadersql = "SELECT * FROM `modx_menus`";
$query = $modx->query($leadersql);
$rows = array();
if ($query) {
// loop through the result set and inspect one row at a time
while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
array_push($rows, $row);
}
}
echo '<br /><br /><pre>';
print_r($rows);
echo '</pre>';
如果没有: - 您是否定义了菜单项?- 你在调用你的片段未缓存?
理想情况下,您将使用xPDO方法来构建数据库查询。它自动转义提供的参数,创建跨数据库类型(当前为 mysql 和 mssql)转换的查询,并具有许多其他好处。但是,设置起来也比较棘手,因为您需要为自定义表创建类和映射。Bob 的指南和Lazylegs一样有很好的信息
但当然,您可以实现您的特定查询,而无需使用 XPDO:
$leadersql = "SELECT * FROM `modx_menus`";
$query = $modx->query($leadersql);
if ($query) {
// loop through the result set and inspect one row at a time
while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
array_push($rows, $row);
}
}
还有Rowboat插件,用于跨数据库表行进行迭代 - 如果您的要求很简单。
为什么不使用内置的 xPDO 方法:
$menus = $modx->getCollection('modMenu');
if ($menus) {
foreach ($menus as $menu) {
echo $menu->get('text');
}
}
你可以试试这段代码:
<?php
include './core/config/config.inc.php';
$con=mysqli_connect($database_server,$database_user,$database_password,$dbase);
// Check connection
mysqli_set_charset($con, "utf8");
if (mysqli_connect_errno()) {
//echo "Failed to connect to MySQL: " . mysqli_connect_error();
return "DB error";
}
$result = mysqli_query($con,"SELECT id, pagetitle, uri FROM `modx_site_content` WHERE parent = ".$parentId);
while($row = mysqli_fetch_array($result))
{
//do something with $row['pagetitle'];
}
其中 $parentId 是来自 Snippet 调用的示例参数。