0

以下のコードを参照してください。modx というデータベースからデータを取得しようとしています。データはそこにあります。つまり、phpmyadmin でデータベースにクエリを実行すると、結果が得られます。なぜ modx で動作しないのかわかりません。

$sql =  'SELECT * FROM orders ORDER BY created DESC LIMIT 1';

$stmt = $modx->prepare($sql);
$stmt->execute(); 

// Put data in array
$order_data = $stmt->fetch(PDO::FETCH_ASSOC);
if ($order_data == '') {
    return 'Resultset empty for user '. $user_id.'.<br />'.$sql;
} else {
    return 'Data found!';
}
4

3 に答える 3

0

出力をループする必要があります。結果は配列の配列になります。

以下の例は、データを返し、チャンク形式に従って表示します

<?php
$sql = "SELECT * FROM `table_name`";
$query = $modx->query($sql);
$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);
        $output .= $modx->getChunk($tpl,$row);
    }
}
$output = "<table border=\"1\" cellpadding=\"5\" >
<th>ID</th><th>row1_Head</th><th>row2_Head</th><th>row3_Head</th><th>row4_Head</th><th>row5_Head</th>
$output</table>";
return $output;

これはチャンクの例です:

<tr>
<td>[[+id]]</td> <td>[[+row1]]</td> <td>[[+row2]]</td> <td>[[+row3]]</td> <td>[[+row4]]</td> <td>[[+row5]]</td> 
</tr>

リソースでスニペットを次のように呼び出します

[[!Snippet_name? &tpl=`chunk_name`]]
于 2013-09-21T17:44:13.140 に答える
0
$sql =  'SELECT * FROM orders ORDER BY created DESC LIMIT 1';

スキーマが次のようであると仮定します

<?xml version="1.0" encoding="UTF-8"?>
<model package="your_package_name" baseClass="xPDOObject" platform="mysql" defaultEngine="MyISAM" version="1.1">
    <object class="Orders" table="orders" extends="xPDOSimpleObject">
        <field key="order_no" dbtype="varchar" precision="255" phptype="string" null="false" />
        <!-- and everything else below  -->

    </object>

    <!-- and everything else below  -->
</model>

あなたがする必要があるのは、これと同じくらい簡単です:

$modx->addPackage('your_package_name'); // Add your table schema to MODX object

$orders = $modx->getCollection('Orders'); // class's name, not table's name
$output = '';
if ($orders){
    $outputArray = array();
    foreach ($orders as $order) {
        $orderArray = $order->toArray();
        $outputArray[] = $modx->getChunk('your_row_chunk_name', $orderArray);
    }
    $wrapper = array(
        'orders' => @implode("\n", $outputArray);
    );
    $output = $modx->getChunk('your_wrapper_chunk_name', $wrapper);
}

return $output;
于 2013-12-27T10:58:44.017 に答える
0

おそらく xPDO を使用してみてください:

$sql = 'SELECT * FROM orders ORDER BY created DESC LIMIT 1';

$c = new xPDOCriteria($modx,$sql);
if ($c->stmt && $c->stmt->execute()) {
    $order_data = $c->stmt->fetch(PDO::FETCH_ASSOC);
    var_dump($order_data);
}
于 2012-06-27T23:34:13.147 に答える