-1

データテーブルに MSSQL データベースを設定するのに本当に苦労しています (SQL Server 2012 Express で管理されています)。彼らのサイトからいくつかのスクリプトを試しました(ODBCスクリプトを使用したサーバー側のPHP)。ただし、どれも機能していません。現在使用しようとしている投稿 ( http://www.datatables.net/forums/discussion/7359/mssql-as-data-source...-im-confused/p1 )を見つけました。これが私のコードです

<table class="display" id="table1">
    <thead>
        <tr>
            <th>PRIMARY HEADINGS</th>
            <th>PRIMARY CLASS CODE</th>
            <th>PH DESCRIPTION</th>
        </tr>
</thead>
    <tbody>
        <?php
            include("scripts/script.php");

            $sql= "SELECT *
            FROM dbo.PriClass
            ORDER BY ID";
            $result = sqlsrv_query($conn, $sql);

            while($value=sqlsrv_fetch_array($result)){
                echo "<tr>",
                "<td>$value[Primary Headings]</td>",
                "<td>$value[Primary Class Code]</td>",
                "<td>$value[PH Description]</td>",
                "</tr>";
            }
        ?>
    </tbody>
    <tfoot>
        <tr>
            <th>PRIMARY HEADINGS</th>
            <th>PRIMARY CLASS CODE</th>
            <th>PH DESCRIPTION</th>
        </tr>
</tfoot>
</table>

そして、ここに.phpファイルがあります

<?php
    $hostname = "SERVERNAME";
    $username = "USERNAME";
    $password = "PASSWORD";
    $dbname = "DBNAME";
    $connectionInfo = array( "UID"=>$username, "PWD"=>$password, "Database"=>$dbname);
    $conn = sqlsrv_connect($hostname, $connectionInfo);

    if($conn === false) {
        echo "Unable to connect to database.";
        die( print_r( sqlsrv_errors(), true));
    }  
?>

したがって、このコードは次のように出力します。

http://i.imgur.com/iFVa2U5.png

私は PHP とデータベースについてほとんど何も知らないので、これを修正する方法がわかりません。理想的には、列もループする別の while ループが必要です。例えば

while(loops through each row) {
    echo "<tr>",

    while(loops through each column) {
        "<td>value of the cell</td>",
    }

    "</tr>";
}

このようにして、さまざまなサイズのデータ​​ベースのコードを簡単に再利用できます。ただし、tad と tfoot 用に他の php コードも必要になると思います。これをテストしているデータベースには、4 つの列 (1 つは ID であり、インデックス作成にのみ使用されます) と 14 行があります。私はこれを WebMatrix 3 で構築していますが、既にそれを介してデータベースに接続しています。誰かが私を助けることができれば、それは素晴らしいことです. ありがとう


編集:質問を解決しました(これを閉じてくれてありがとう...)。答えはサーバー側の処理に依存していませんが、とにかく必要ないと思います。MSSQL データベースからデータを読み取り、それをテーブルに入力するだけです。

.php

<?php
// This is for SQL Authentication. I've added instructions if you are using Windows Authentication

// Uncomment this line for troubleshooting / if nothing displays
//ini_set('display_errors', 'On');

// Server Name
$myServer = "SRVR";

// If using Windows Authentication, delete this line and the $myPass line as well.
// SQL Server User that has permission to the database
$myUser = "usr";

// SQL Server User Password
$myPass = "Passwd1";

// Database
$myDB = "TestDB";

// If using Windows Authentication, get rid of, "'UID'=>$myUser, 'PWD'=>$myPass, "
// Notice that the latest driver uses sqlsrv rather than mssql
$conn = sqlsrv_connect($myServer, array('UID'=>$myUser, 'PWD'=>$myPass, 'Database'=>$myDB));

// Change TestDB.vwTestData to YOURDB.dbo.YOURTABLENAME
$sql ="SELECT * FROM TestDB.dbo.vwTestData";
$data = sqlsrv_query($conn, $sql);  

$result = array();  

do {
    while ($row = sqlsrv_fetch_array($data, SQLSRV_FETCH_ASSOC)){
        $result[] = $row;  
    }
}while ( sqlsrv_next_result($data) );

// This will output in JSON format if you try to hit the page in a browser
echo json_encode($result);

sqlsrv_free_stmt($data);
sqlsrv_close($conn);
?>

.js

$(document).ready(function() {
    $('#table1').dataTable( {
        "bProcessing": true,
        "sAjaxSource": "scripts/script.php",
        "sAjaxDataProp": "",
        "aoColumns": [
            { "mData": "Column 1" },
            { "mData": "Column 2" },
            { "mData": "etc..." },
        ]
    });
});
4

1 に答える 1

2

サーバーをチェックして、phpを解析していることを確認してください。

さらに、echo 内の php 配列変数にアクセスするときは、括弧で囲む必要があることがわかりました。したがって:

$value[主見出し]

次のようになります。

{$value['Primary Headings']}

また、配列内のインデックスとしてスペースを使用することは悪い習慣であるため、今後は避けます。while ループについては、これを試してください。

function associativeArrayForResult($result){
  $resultArray = array();
    for($i=0; $i<sqlsrv_num_rows($result); $i++){
        for($j=0; $j<sqlsrv_num_fields($result); $j++){
            sqlsrv_fetch($result, $i);
            $resultArray[$i][sqlsrv_get_field($result, $j)] = sqlsrv_get_field($result, $j);
        }
    }
    return $resultArray;
}
于 2013-06-03T16:13:59.770 に答える