如何使用PDO获取BLOB的完整字符串?

时间:2013-02-12 21:35:44

标签: php sql pdo

我正在为PHP数据连接器创建一个C#,以允许与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#中转换为datatable的结果字符串的拆分字符使用不可打印的字符而将二进制数据用作字符串可能包含这些字符。问题是我在c#中进行转换以获取原始字符串,以便将其转换为字节数组。我使用System.Text.Encoding.ASCII.GetString将Base64字节数组转换为原始字符串。除了来自BLOB字段的二进制数据之外,这正在处理所有内容。

它可能是一个终结角色的建议是让我找到它的原因。一旦使用ASCII将Base64转换为字符串,就会有一些东西变成终结符,并且它在那时停止了转换。一旦我发现这个,我改为System.Text.Encoding.Default.GetString,现在它完美无缺。

发布答案以防其他人可能尝试这样做并遇到同样的问题。

1 个答案:

答案 0 :(得分:0)

问题编辑中的更多详细信息。

从System.Text.Encoding.ASCII.GetString更改为System.Text.Encoding.Default.GetString,问题已解决。

谢谢你匆匆指责我正确的方向找到解决方案。