【问题标题】:Insert blob (from mysql) data in varbinary (SQL Server) field with Zend_Db使用 Zend_Db 在 varbinary (SQL Server) 字段中插入 blob(来自 mysql)数据
【发布时间】:2012-03-01 12:45:34
【问题描述】:

我有一个需要与 SQL Server 表同步的 MySQL 表。因此,来自 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)。我认为这只是一个简单的错误,但我无法弄清楚。谁能帮我解决这个问题?

【问题讨论】:

  • 我自己发现的,但是我要等7个小时才能回复。我希望我仍然记得在 7 小时后打开这个问题..

标签: sql-server-2008 pdo blob zend-db varbinary


【解决方案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();
    }
}
?>

【讨论】:

    猜你喜欢
    • 2017-10-22
    • 2017-10-17
    • 2021-01-31
    • 1970-01-01
    • 2017-05-28
    • 2013-04-05
    • 2021-09-27
    • 2018-11-13
    • 1970-01-01
    相关资源
    最近更新 更多