1

MSSQL から PHP でテキスト フィールドを表示しようとしています。大量のものを読みましたが、何も機能していません。select ステートメントは MSSQL で機能しますが、PHP に配置すると PHP コードが壊れ、ページが勝ちました表示しません。
ここに私の問題があります。mssql には、このようなデータを出力する説明フィールドがあります。

30" x 60" D/S Banner

また

Billboard 16 x 60 (17'H x 61'W)  3/3 Pockets

また

Barbara's Mesh Banner

したがって、ジョブの配列を表示しているときに、ジョブ番号、数量、および日付は正常に表示されますが、説明には何も表示されません。

replace( replace( convert(varchar(max), Description), '"', ''), '''', '') as Description

しかし、それは私のPHPページを壊し、何も表示しませんが、私のMSSQL qryでは問題なく動作します. str_replace を使用してPHP側から試してみましたが、役に立ちませんでした。任意の入力をいただければ幸いです

PHPでの私のSQL文

$qry = odbc_exec($connection, "SELECT A.CompanyName, TH.OrderNumber, TD.ID AS PartNumber, TD.Description, TD.Quantity, TD.LineItemNumber,
TH.AccountID, TH.OrderCreatedDate, TH.SaleDate, TH.DueDate, InternalNotes, ProductionNotesTemplate
From TransHeader TH
    Join TransDetail TD
        ON TH.OrderNumber = TD.TransHeaderTransNumber
    LEFT JOIN Account A
        ON TH.AccountID = A.ID
WHERE  AccountNumber = '$AccountNumber' " );

PHPで配列を表示する

while(odbc_fetch_array($qry)){

        $OrderNumber        = odbc_result($qry, "OrderNumber");

        $PartNumber         = odbc_result($qry, "PartNumber");

        $QTY            = odbc_result($qry, "Quantity");

        $InternalNotes      = odbc_result($qry, "InternalNotes");
        $Description        = odbc_result($qry, "Description");

        $DueDate        = odbc_result($qry, "DueDate");
        $LineItemNumber     = odbc_result($qry, "LineItemNumber");
        $ProductionNotes    = odbc_result($qry, 'ProductionNotesTemplate')
4

2 に答える 2

0

PDOを使用し、プリペアドステートメントを使用して、値をクエリにバインドし、引用符をエスケープする問題全体を完全にバイパスしてみませんか?

PDOを使用するステップバイステップのプロセスの詳細については、Googleがお友達です。最初のページの結果をざっと見た後、このチュートリアルは最も有望であるように思われました。

お役に立てれば!

于 2012-12-01T22:24:40.877 に答える
0

あなたのコードでは、それが起こるべき理由はありません。

引用符が原因で置換クエリが失敗します。「ヒアドキュメント」構文を試して、エスケープを簡素化してください

$sql_code = <<<SQL_CODE

A.CompanyName、TH.OrderNumber、TD.ID AS PartNumber、TD.Description、TD.Quantity、TD.LineItemNumber、TH.AccountID、TH.OrderCreatedDate、TH.SaleDate、TH.DueDate、replace( replace( convert(varchar (max), InternalNotes), '"', 'in'), '\'', 'ft') as InternalNotes, ProductionNotesTemplate TransHeader TH から TransDetail TD に参加 TH.OrderNumber = TD.TransHeaderTransNumber LEFT JOIN Account A on TH. AccountID = A.ID WHERE AccountNumber = '$AccountNumber'; SQL_CODE;

$qry = odbc_exec($connection, $sql_code);

しかし、前のエラー、表示を置き換えないと壊れているという事実は、フィールドに引用符よりも奇妙なものが含まれているか、単に「出力」しない限り説明がありません (たとえば、DOM エンティティを追加しようとした場合HTML を生成して Javascript コードに入れると、そうです、引用符はほぼ確実にページを壊し、何も表示しない可能性があります (これでも 500 エラーの説明にはなりません)。

したがって、元のクエリを試してみてください。ただし、次のInternalNotesように出力します。

<td><?php print HTMLEntities($InternalNotes); ?></td>

その変数の中に実際にあるものを見てください。

于 2012-12-01T22:49:49.380 に答える