Sql server 2008 使用Zend_Db在varbinary(SQL Server)字段中插入blob(来自mysql)数据

Sql server 2008 使用Zend_Db在varbinary(SQL Server)字段中插入blob(来自mysql)数据,sql-server-2008,pdo,blob,zend-db,varbinary,Sql Server 2008,Pdo,Blob,Zend Db,Varbinary,我有一个MySQL表,需要与SQL Server表同步。因此,来自MySQL的数据将移动到SQL Server。它通过简单的选择*和插入查询来完成。但是,我在将一些BLOB数据迁移到varbinary字段时遇到了问题 所以我有这个代码: $db_mysql = new Zend_Db_Adapter_Pdo_Mysql(array( 'host' => '127.0.0.1', 'username' => '<user>', 'pa

我有一个MySQL表,需要与SQL Server表同步。因此,来自MySQL的数据将移动到SQL Server。它通过简单的选择*和插入查询来完成。但是,我在将一些BLOB数据迁移到varbinary字段时遇到了问题

所以我有这个代码:

$db_mysql = new Zend_Db_Adapter_Pdo_Mysql(array(
    'host'      =>  '127.0.0.1',
    'username'  =>  '<user>',
    'password'  =>  '<password>',
    'dbname'    =>  '<db>',
    'charset'   =>  'utf8'
));
$db_mssql = new Zend_Db_Adapter_Pdo_Mssql(array(
    'pdoType'   =>  'sqlsrv',
    'host'      =>  '<host>',
    'username'  =>  '<user>',
    'password'  =>  '<password>',
    'dbname'    =>  '<db>'
));

$rows = $db_mysql->fetchAll("SELECT Id, Picture FROM Rosters");
foreach ($rows as $row) {
    $update_sql = "UPDATE Rosters SET Picture = :picture WHERE Id = :id";

    $stmt = new Zend_Db_Statement_Pdo($db_mssql, $update_sql);
    $stmt->bindValue(":picture", bin2hex($row['Picture']), Zend_Db::PARAM_LOB);
    $stmt->bindValue(":id", $row['Id'], Zend_Db::PARAM_INT);

    try {
        $stmt->execute();
    } catch (Exception $e) {
        echo $e->getMessage();
        var_dump($e);
        die();
    }
}
$db_mysql=新的Zend_db_适配器_Pdo_mysql(数组)(
“主机”=>“127.0.0.1”,
'用户名'=>'',
'密码'=>'',
“dbname'=>”,
“字符集”=>“utf8”
));
$db_mssql=新的Zend_db_适配器_Pdo_mssql(阵列)(
'pdoType'=>'sqlsrv',
'主机'=>'',
'用户名'=>'',
'密码'=>'',
“dbname'=>”
));
$rows=$db_mysql->fetchAll(“从名册中选择Id、图片”);
foreach($行作为$行){
$update\U sql=“更新名册设置图片=:图片,其中Id=:Id”;
$stmt=new Zend_Db_Statement_Pdo($Db_mssql,$update_sql);
$stmt->bindValue(“:picture”,bin2hex($row['picture']),Zend_Db::PARAM_LOB);
$stmt->bindValue(“:id”,$row['id'],Zend_Db::PARAM_INT);
试一试{
$stmt->execute();
}捕获(例外$e){
echo$e->getMessage();
var_dump($e);
模具();
}
}
这给了我一条难以置信的不太有用的错误消息:
PDOException:SQLSTATE[HY000]:常规错误:257常规SQL Server错误:检查来自SQL Server的消息[257](严重性16)[(null)]


MySQL Blob字段定义为
Blob
,属性为
BINARY
,SQL Server字段定义为
(varbinary(max),null)
。我想这只是一个简单的错误,但我想不出来。有人能帮我解决这个问题吗?

好的。我自己发现的,这是工作代码:

$db_mysql = new Zend_Db_Adapter_Pdo_Mysql(array(
    'host'      =>  '127.0.0.1',
    'username'  =>  '<user>',
    'password'  =>  '<pass>',
    'dbname'    =>  '<db>',
    'charset'   =>  'utf8'
));
$db_mssql = new Zend_Db_Adapter_Pdo_Mssql(array(
    'pdoType'   =>  'odbc',
    'host'      =>  '<host>',
    'username'  =>  '<user>',
    'password'  =>  '<pwd>',
    'dbname'    =>  'Roosters'
));
    $rows = $db_mysql->fetchAll("SELECT Id, Picture FROM Rosters");
    foreach ($rows as $row) {
        $update_sql = "UPDATE Rosters SET Picture = CONVERT(varbinary(max), :picture, 2) WHERE Id = :id";
        $stmt = new Zend_Db_Statement_Pdo($db_mssql, $update_sql);
        $stmt->bindValue(":picture", bin2hex($row['Picture']));
        $stmt->bindValue(":id", $row['Id'], Zend_Db::PARAM_INT);

    try {
        $stmt->execute();
    } catch (Exception $e) {
        echo $e->getMessage();
        var_dump($e);
        die();
    }
}
?>
$db_mysql=新的Zend_db_适配器_Pdo_mysql(数组)(
“主机”=>“127.0.0.1”,
'用户名'=>'',
'密码'=>'',
“dbname'=>”,
“字符集”=>“utf8”
));
$db_mssql=新的Zend_db_适配器_Pdo_mssql(阵列)(
'pdoType'=>'odbc',
'主机'=>'',
'用户名'=>'',
'密码'=>'',
“dbname”=>“公鸡”
));
$rows=$db_mysql->fetchAll(“从名册中选择Id、图片”);
foreach($行作为$行){
$update_sql=“更新名册设置图片=转换(varbinary(max),:Picture,2),其中Id=:Id”;
$stmt=new Zend_Db_Statement_Pdo($Db_mssql,$update_sql);
$stmt->bindValue(“:picture”,bin2hex($row['picture']);
$stmt->bindValue(“:id”,$row['id'],Zend_Db::PARAM_INT);
试一试{
$stmt->execute();
}捕获(例外$e){
echo$e->getMessage();
var_dump($e);
模具();
}
}
?>

好的。我自己发现的,这是工作代码:

$db_mysql = new Zend_Db_Adapter_Pdo_Mysql(array(
    'host'      =>  '127.0.0.1',
    'username'  =>  '<user>',
    'password'  =>  '<pass>',
    'dbname'    =>  '<db>',
    'charset'   =>  'utf8'
));
$db_mssql = new Zend_Db_Adapter_Pdo_Mssql(array(
    'pdoType'   =>  'odbc',
    'host'      =>  '<host>',
    'username'  =>  '<user>',
    'password'  =>  '<pwd>',
    'dbname'    =>  'Roosters'
));
    $rows = $db_mysql->fetchAll("SELECT Id, Picture FROM Rosters");
    foreach ($rows as $row) {
        $update_sql = "UPDATE Rosters SET Picture = CONVERT(varbinary(max), :picture, 2) WHERE Id = :id";
        $stmt = new Zend_Db_Statement_Pdo($db_mssql, $update_sql);
        $stmt->bindValue(":picture", bin2hex($row['Picture']));
        $stmt->bindValue(":id", $row['Id'], Zend_Db::PARAM_INT);

    try {
        $stmt->execute();
    } catch (Exception $e) {
        echo $e->getMessage();
        var_dump($e);
        die();
    }
}
?>
$db_mysql=新的Zend_db_适配器_Pdo_mysql(数组)(
“主机”=>“127.0.0.1”,
'用户名'=>'',
'密码'=>'',
“dbname'=>”,
“字符集”=>“utf8”
));
$db_mssql=新的Zend_db_适配器_Pdo_mssql(阵列)(
'pdoType'=>'odbc',
'主机'=>'',
'用户名'=>'',
'密码'=>'',
“dbname”=>“公鸡”
));
$rows=$db_mysql->fetchAll(“从名册中选择Id、图片”);
foreach($行作为$行){
$update_sql=“更新名册设置图片=转换(varbinary(max),:Picture,2),其中Id=:Id”;
$stmt=new Zend_Db_Statement_Pdo($Db_mssql,$update_sql);
$stmt->bindValue(“:picture”,bin2hex($row['picture']);
$stmt->bindValue(“:id”,$row['id'],Zend_Db::PARAM_INT);
试一试{
$stmt->execute();
}捕获(例外$e){
echo$e->getMessage();
var_dump($e);
模具();
}
}
?>

我自己发现的,但我必须等7个小时才能回复。我希望我还记得7个小时后这个问题还没有解决我自己发现的,但我必须等7个小时才能回答。我希望我还记得7小时后这个问题还没有解决。。