2012-03-01 25 views
1

SQL Serverテーブルと同期する必要があるMySQLテーブルがあります。したがって、MySQLからのデータはSQL Serverに移動します。単純なSELECT *およびINSERT INTOクエリによって実行されます。しかし、いくつかのBLOBデータをvarbinaryフィールドに移行する際に問題が発生しました。Zend_Dbでvarbinary(SQL Server)フィールドにblob(mysqlから)データを挿入します。

だから私はこのコードを持っている:

$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(); 
    } 
} 

は、これは私の信じられないほど、それほど有用ではないエラーメッセージを表示します。PDOException: SQLSTATE[HY000]: General error: 257 General SQL Server error: Check messages from the SQL Server [257] (severity 16) [(null)]

は、MySQLのBLOBフィールドは、属性BINARYBLOB、SQLのように定義されますサーバーフィールドは(varbinary(max), null)と定義されています。私はそれが単なる単純な間違いだと思うが、私はそれを理解できない。誰もがこれで私を助けることができますか?

+0

は、私は自分でそれを見つけたが、私はそれに答えることができる前に7時間を待たなければなりません。私はまだ7時間後にこの質問を開いていることを覚えています。 – henk

答えて

1

私は自分でそれを見つけた、これは動作するコードです:

$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(); 
    } 
} 
?> 
関連する問題