1

データ型が「テキスト」である MS SQL データベースのフィールドの内容を表示しようとしています。PC で MS Excel を使用してデータベースに接続すると、値は次のようになります。

発送日: 18/10/12 Toll IPEC Connote 番号: XXX XXX XXXX

Linux 用の Microsoft ODBC ドライバーを使用して PHP でデータベースに接続すると、テキスト フィールドの出力にランダムな文字が表示されます。これは、まったく同じスクリプトを実行するたびにわずかに異なります。過去4回の出力は次のとおりです。

Xisep)!ØwXment.class.php))

5isep)!ment.class.php))

µ}isep)!Ø}ment.class.php))

t)!!Owner_IDt)Ø©Ø8

「ment.class.php」ビットがどこから取得されているのかわかりません。これは私のクラスの 1 つの名前の末尾のように見えますが、この特定のスクリプトに含まれているものではありません。ドライバーが壊れているか、それとも何ですか?他のすべてのデータ型 (int、varchar、datetime など) は正しく表示されるようですが、問題はこの 1 つのテキスト フィールドでのみ発生するようです。

コードは次のとおりです。

<?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!

&Èö×!!ö×Y!

4

1 に答える 1

2

オーバーフローしているようです。何らかの理由で、SQL はテキスト フィールドの長さを 0 として渡します。これは、SQL では「長い」ことを意味しますが、PHP では「わからない」ことを意味するため、PHP はメモリ内のデータを期待する場所 (または何か) に表示します。そのように-PHPの専門家は説明したいと思っていますか?)。

これは以前に varchar(max) で見たことがありますが、テキストでは見たことがありません。(変換) テキストは、通常、それを修正する方法です。だから多分私は間違っている。

これが役立つことを願っています。私は PHP 開発者ではありません。時々使用する必要があるだけです。これは、私が以前に経験したつらい経験のように思えます :)

于 2013-03-28T06:05:38.077 に答える