Вставьте данные blob (из mysql) в поле varbinary (SQL Server) с помощью Zend_Db

У меня есть таблица MySQL, которую необходимо синхронизировать с таблицей SQL Server. Таким образом, данные из MySQL перемещаются в SQL Server. Это делается простыми запросами SELECT * и INSERT INTO. Однако у меня возникли проблемы с переносом некоторых данных 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();
    }
}

Это дает мне невероятное не очень полезное сообщение об ошибке: PDOException: SQLSTATE[HY000]: General error: 257 General SQL Server error: Check messages from the SQL Server [257] (severity 16) [(null)]

Поле MySQL Blob определяется как BLOB с атрибутом BINARY, поле SQL Server определяется как (varbinary(max), null). Я думаю, что это просто ошибка, но я не могу понять это. Может ли кто-нибудь помочь мне с этим?


person henk    schedule 01.03.2012    source источник
comment
Я узнал об этом сам, но мне нужно ждать 7 часов, прежде чем я смогу ответить на него. Надеюсь, я все еще помню, как этот вопрос был открыт через 7 часов.   -  person henk    schedule 01.03.2012


Ответы (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();
    }
}
?>
person henk    schedule 02.03.2012