我正在创建一个 C# 到 PHP 数据连接器,以允许标准化连接到 Web 服务器以将数据从数据库托管到 C# WinForm 应用程序。一切都在处理这个小例外。
使用的基本是这个。
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 无关。我在将 BLOB 数据放入数组之前对其进行 Base64 处理,因为我用来构建结果字符串的拆分字符将在 c# 中转换为数据表使用不可打印字符和二进制数据作为字符串可能包含这些字符。问题是当我在 c# 中进行转换以获取原始字符串以便可以将其转换为字节数组时。我正在使用 System.Text.Encoding.ASCII.GetString 将 Base64 字节数组转换为原始字符串。除了来自 BLOB 字段的二进制数据之外,这一切都在工作。
它可能是一个终止字符的建议是让我找到它的原因。一旦使用 ASCII 将 Base64 转换为字符串,就会有一些东西变成了终止符,并且在那个时候停止了转换。一旦我发现这一点,我就更改为 System.Text.Encoding.Default.GetString,现在它可以完美运行了。
发布答案,以防其他人可能正在尝试这样做并遇到同样的问题。