我正在尝试在ModX Revo中的代码段内查询数据库:
<?php
$leadersql = "SELECT * FROM `modx_menus`";
$result = mysql_query($leadersql);
while ($row = mysql_fetch_array($result)) {
echo "hello";
};
?>
在Evo上,这种方法很好但在Revo中没有任何返回。
我需要以不同的方式进行设置吗?
答案 0 :(得分:8)
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>';
如果不是: - 你确实定义了菜单项吗? - 你正在调用你的片段未缓存?
答案 1 :(得分:4)
理想情况下,您可以使用xPDO方法构建数据库查询。它会自动转义提供的参数,创建跨数据库类型(当前为mysql&amp; mssql)转换的查询,并具有许多其他好处。但是,设置因为需要为自定义表创建类和映射也很棘手。 Bob's guides有很好的信息,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加载项,用于跨数据库表行进行迭代 - 如果您的要求很简单。
答案 2 :(得分:3)
为什么不使用内置的xPDO方法:
$menus = $modx->getCollection('modMenu');
if ($menus) {
foreach ($menus as $menu) {
echo $menu->get('text');
}
}
答案 3 :(得分:-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调用的示例参数。