Php 如何使用PDO获得BLOB的完整字符串?
我正在创建一个C#to PHP数据连接器,以允许与web服务器的标准连接,从而将数据从数据库托管到C#WinForm应用程序。这是一个小小的例外,一切正常 其基本用途是这样的 C#向服务器发送AES加密命令。服务器解析命令并执行SQL查询并返回AES加密字符串。然后将该字符串转换为C#中的数据表 当SQL包含一个BLOB列时,我只返回完整数据的一小部分。该字段似乎仅限于前2792个字节 是否存在阻止返回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
$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-我想这是可能的。我将对此进行测试,并用我发现的内容发布/编辑。