Php 在ModX Revo中运行自定义数据库查询

Php 在ModX Revo中运行自定义数据库查询,php,mysql,content-management-system,modx,modx-revolution,Php,Mysql,Content Management System,Modx,Modx Revolution,我试图在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中没有返回任何内容


是否需要以不同的方式进行设置?

理想情况下,您可以使用该方法来构建数据库查询。它自动转义提供的参数,创建跨数据库类型(当前为mysql和mssql)转换的查询,并具有许多其他好处。然而,由于需要为自定义表创建类和映射,所以设置起来也比较复杂。他有很好的信息,我也是

但是,您当然可以实现特定的查询,而无需使用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);
    }
}

还有一个附加组件,用于在数据库表行之间进行迭代—如果您的需求很简单。

理想情况下,您可以使用该方法来构建数据库查询。它自动转义提供的参数,创建跨数据库类型(当前为mysql和mssql)转换的查询,并具有许多其他好处。然而,由于需要为自定义表创建类和映射,所以设置起来也比较复杂。他有很好的信息,我也是

但是,您当然可以实现特定的查询,而无需使用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);
    }
}

另外还有一个附加组件,用于在数据库表行之间进行迭代—如果您的要求很简单的话。

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>';
$leadersql=“从'modx_菜单'中选择*”;
$query=$modx->query($leadersql);
$rows=array();
如果($query){
//循环遍历结果集,每次检查一行
while($row=$query->fetch(PDO::fetch_ASSOC)){
数组\u push($rows,$row);
}
}
回音“

”;
$menus = $modx->getCollection('modMenu');
if ($menus) {
    foreach ($menus as $menu) {
        echo $menu->get('text');
    }
}
打印(行); 回声';
如果没有: -您是否定义了菜单项?
-您正在调用未缓存的代码段

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>';
$leadersql=“从'modx_菜单'中选择*”;
$query=$modx->query($leadersql);
$rows=array();
如果($query){
//循环遍历结果集,每次检查一行
while($row=$query->fetch(PDO::fetch_ASSOC)){
数组\u push($rows,$row);
}
}
回音“

”;
$menus = $modx->getCollection('modMenu');
if ($menus) {
    foreach ($menus as $menu) {
        echo $menu->get('text');
    }
}
打印(行); 回声';
如果没有: -您是否定义了菜单项?
-您正在调用未缓存的代码段

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

<?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'];
}

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

<?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'];
}
您可以尝试以下代码:

您可以尝试以下代码:


谢谢,但运气不好!使用自己的表创建自己的数据库并正常连接会更容易吗?我刚刚添加了一行关于Rowboat的内容-你看过了吗?是的-Rowboat只输出查询结果,不是吗?我不能把它转换成PHP变量,可以吗?谢谢,但运气不好!使用自己的表创建自己的数据库并正常连接会更容易吗?我刚刚添加了一行关于Rowboat的内容-你看过了吗?是的-Rowboat只输出查询结果,不是吗?我不能把它放进PHP变量中,可以吗?不要使用GET或POST中的这个具体参数来防止SQL注入。用prepare代替这个。谢谢你们的评论,但我的帖子的目的是展示如何在一个工作版本中从Modx Revo连接到数据库。由作者决定是否需要sql注入保护。例如,您也可以在内部网站上使用modx,这样就不会有sql注入的风险。不要使用GET或POST中的参数来阻止sql注入。用prepare代替这个。谢谢你们的评论,但我的帖子的目的是展示如何在一个工作版本中从Modx Revo连接到数据库。由作者决定是否需要sql注入保护。例如,您也可以在内部网站上使用modx,这样就不会有sql注入的风险。