C# から PHP へのデータ コネクタを作成して、Web サーバーへの標準化された接続を可能にし、データベースから C# WinForm アプリケーションへのデータをホストします。この1つの小さな例外を除いて、すべてが機能しています。
使い方の基本はこれです。
C# は、AES 暗号化コマンドをサーバーに送信します。サーバーはコマンドを解析して SQL クエリを実行し、AES 暗号化文字列を返します。この文字列は、C# で DataTable に変換されます。
SQL に BLOB である列が含まれている場合、完全なデータのごく一部しか返されません。フィールドは最初の 2792 バイトのみに制限されているようです。
BLOB の完全なコンテンツが返されないようにする設定はありますか?
参考になるかどうかわかりませんが、作業を行うコードは次のとおりです。
$DataConnection = new PDO('mysql:host=10.10.100.102;dbname=jmadata', "root", "nbtis01");
$DataConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if (isset($Parameters['SQLQuery'])) { // Default List
$SQLQuery = $Parameters['SQLQuery'];
unset($Parameters['SQLQuery']);
}
if (isset($Parameters['LimitOverride'])) {
if (!strpos(strtoupper($SQLQuery), "LIMIT"))
$SQLQuery = rtrim($SQLQuery, ';') . " LIMIT " . $Parameters['LimitOverride'];
unset($Parameters['LimitOverride']);
}
$QueryParams = array();
foreach ($Parameters as $key => $value)
if ($key !== '')
$QueryParams[$key] = $value;
$Query = $DataConnection->prepare($SQLQuery);
$Query->execute($QueryParams);
$ReturnArray = $Query->fetchAll(PDO::FETCH_ASSOC);
if (!$ReturnArray)
$ReturnArray[0] = array("NoResults" => "");
編集-- 回答
私の問題を見つけました。この問題は、PDO、PHP、または MySQL とは何の関係もありませんでした。C#でデータテーブルに変換される結果文字列を作成するために使用していた分割文字は、印刷できない文字とバイナリデータをstring にはこれらの文字が含まれている可能性があります。問題は、元の文字列を取得するために c# で変換を行っていたときに、それをバイト配列に変換できるようにすることでした。System.Text.Encoding.ASCII.GetString を使用して Base64 バイト配列を元の文字列に変換していました。これは、BLOB フィールドからのバイナリ データ以外のすべてで機能していました。
それが終了文字である可能性があるという提案が、私がそれを見つけた理由です. Base64 が ASCII を使用して文字列に変換されると、何かがターミネータに変わり、その時点で変換が停止していました。これを見つけたら、 System.Text.Encoding.Default.GetString に変更しましたが、今では完璧に動作します。
他の誰かがこれをやろうとして同じ問題を抱えている可能性がある場合に備えて、回答を投稿しました。