如何使用适用于Linux的Microsoft ODBC驱动程序正确显示“文本”数据?目前显示为随机字符

时间:2012-10-29 01:58:17

标签: php sql-server odbc

我试图在MS SQL数据库中显示字段的内容,其数据类型为“text”。当我在PC上使用MS Excel连接到数据库时,其值类似于:

  

发货日期:18/10/12 Toll IPEC Connote Number:XXX XXX XXXX

当我使用适用于Linux的Microsoft ODBC驱动程序使用PHP连接到数据库时,文本字段的输出将显示随机字符,每次运行完全相同的脚本时,这些字符会略有不同。这是最后四次输出的内容:

  

Xisep)!ØwXment.class.php))

     

5isep)!ment.class.php))

     

μ} ISEP)!Ø} ment.class.php))

     

T)!! Owner_IDt)O©Ø8

不知道从哪里得到'ment.class.php'位。这看起来像我的一个类的名称的结尾,但不包含在这个特定的脚本中。司机坏了还是什么?所有其他数据类型(int,varchar,datetime等)似乎都正确显示,这个问题似乎只发生在这一个文本字段中。

以下是代码:

<?php

require('ConnectWise.inc.php');

$config = new CW_Config;

// Connect to database
$dbcnx = odbc_connect("ConnectWise", $config->db_username, $config->db_password);

// Query database
$query = "select * from Billing_Log where Invoice_Number = '24011'";
$result = odbc_exec($dbcnx, $query);
while ($row = odbc_fetch_array($result)) {
    echo $row['Top_Comment'] . "\n";
}

odbc_close($dbcnx);

以下是我最近几次尝试的输出:

  

\3ȶä!!¶äY!

     

öÈö§!!ö§Y!

     

&安培;!EO×!!ö×Y

1 个答案:

答案 0 :(得分:2)

看起来你正在溢出。由于某种原因,SQL将文本字段的长度传递为0,这对于SQL意味着“长”,但对于PHP意味着“我不知道”,因此PHP在其预期数据的位置显示其内存中的任何内容(或某些内容)那样 - 任何PHP专家都在解释?)。

我之前看过varchar(max)但不是文本。 (转换为)文本通常是修复它的方法。也许我错了。

希望这有一些帮助。我不是一个PHP开发人员,我只是偶尔使用它,这听起来很像我以前经历过的痛苦经历:)