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

因此,当我显示一系列作业时,作业编号、数量和日期显示正常,但描述不会显示任何内容所以我尝试将 sql 中的 qutoes 替换为

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

但这破坏了我的 PHP 页面并且没有显示任何内容,但是在我的 MSSQL qry 中它运行良好。我已经从 PHP 端尝试使用 str_replace 无济于事。任何输入将不胜感激

我在 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

在您的代码中,没有理由发生这种情况。

您的替换查询因引用而失败:尝试使用“here-document”语法来简化转义

$sql_code = <<<SQL_CODE

选择 A.CompanyName、TH.OrderNumber、TD.ID 作为 PartNumber、TD.Description、TD.Quantity、TD.LineItemNumber、TH.AccountID、TH.OrderCreatedDate、TH.SaleDate、TH.DueDate、替换(替换(转换(varchar (max), InternalNotes), '"', 'in'), '\'', 'ft') as 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'; SQL_CODE;

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

但是前面的错误,即不更换显示被破坏的事实,没有解释,除非该字段包含比引号更奇怪的东西,或者您不只是“输出”它(例如:如果您尝试通过生成 HTML 并将其放入 Javascript 代码中,那么是的,引号几乎肯定会破坏您的页面,并且可能根本不显示任何内容。即使仍然不能解释 500 错误)。

所以尝试原始查询,但输出InternalNotes如下:

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

看看这个变量里面到底是什么。

于 2012-12-01T22:49:49.380 回答
0

为什么不使用PDO并使用准备好的语句,将值绑定到您的查询,完全绕过整个引号转义问题?

要了解有关使用 PDO 的分步过程的更多信息,Google是您的朋友。快速浏览第一页的结果后,本教程似乎最有希望。

希望这可以帮助!

于 2012-12-01T22:24:40.877 回答