1

我正在尝试在 ModX Revo 的片段中查询数据库:

<?php

$leadersql = "SELECT * FROM `modx_menus`";

$result = mysql_query($leadersql);

while ($row = mysql_fetch_array($result)) {
  echo "hello";
};

?>

在 Evo 上,这工作正常,但在 Revo 中没有返回任何内容。

我需要进行不同的设置吗?

4

4 回答 4

9

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>';

如果没有: - 您是否定义了菜单项?- 你在调用你的片段未缓存?

于 2012-09-18T12:20:30.563 回答
4

理想情况下,您将使用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插件,用于跨数据库表行进行迭代 - 如果您的要求很简单。

于 2012-09-18T05:16:43.783 回答
3

为什么不使用内置的 xPDO 方法:

$menus = $modx->getCollection('modMenu');
if ($menus) {
    foreach ($menus as $menu) {
        echo $menu->get('text');
    }
}
于 2012-09-20T08:33:17.193 回答
-2

你可以试试这段代码:

<?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 调用的示例参数。

于 2015-10-27T15:28:09.290 回答