Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用PDO获得BLOB的完整字符串?_Php_Sql_Pdo - Fatal编程技术网

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

Php 如何使用PDO获得BLOB的完整字符串?,php,sql,pdo,Php,Sql,Pdo,我正在创建一个C#to PHP数据连接器,以允许与web服务器的标准连接,从而将数据从数据库托管到C#WinForm应用程序。这是一个小小的例外,一切正常 其基本用途是这样的 C#向服务器发送AES加密命令。服务器解析命令并执行SQL查询并返回AES加密字符串。然后将该字符串转换为C#中的数据表 当SQL包含一个BLOB列时,我只返回完整数据的一小部分。该字段似乎仅限于前2792个字节 是否存在阻止返回BLOB的全部内容的设置 我不确定它是否会有帮助,但下面是完成这项工作的代码 $DataCon

我正在创建一个C#to PHP数据连接器,以允许与web服务器的标准连接,从而将数据从数据库托管到C#WinForm应用程序。这是一个小小的例外,一切正常

其基本用途是这样的

C#向服务器发送AES加密命令。服务器解析命令并执行SQL查询并返回AES加密字符串。然后将该字符串转换为C#中的数据表

当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字段中的二进制数据之外,这一切都在工作

这可能是一个终止字符的建议使我找到了它。一旦Base64使用ASCII转换为字符串,就会有东西变成终止符,并在该点停止转换。一旦我找到了它,我就改为System.Text.Encoding.Default.GetString,现在它工作得很好


张贴答案,以防其他人试图这样做,并有同样的问题。

更多详细信息,请参见问题编辑

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


感谢crush为我指明了正确的方向以找到解决方案。

该位置是否可能存在以字符串结尾的空字符?@crush-我想这是可能的。我将对此进行测试,并用我发现的内容发布/编辑。