【问题标题】:Moving image from one SQL server table to another将图像从一个 SQL Server 表移动到另一个
【发布时间】:2017-02-28 07:52:21
【问题描述】:

我有两个存储相同数据的表。一种用于活跃用户,另一种用于非活跃用户。当用户来时,在活动表中搜索,如果未找到,则在非活动表中搜索。如果在非活动表中找到用户信息,则应将其移动到活动表并从非活动表中删除。
这些表有一个存储照片的列。当我尝试将信息插入活动表时,出现以下错误:

SQLSTATE[22018]: [Microsoft][SQL Server Native Client 11.0][SQL Server]Operand type clash: nvarchar(max) is incompatible with image

我确定是照片引起的,因为如果用户信息没有照片,则移动成功。但是当有照片时,它会失败并出现上述错误。

创建表的 SQL:

CREATE TABLE [dbo].[tblBackup](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [DriverId] [int] NULL,
    [FirstNameAmh] [nvarchar](100) NULL,
    [FatherNameAmh] [nvarchar](100) NULL,
    [GrandNameAmh] [nvarchar](100) NULL,
    [Photo] [image] NULL
)

代码如下:

$dbc->beginTransaction();
$sql = "select * from tblBackup where Id=?";
$stmt = $dbc->prepare($sql);
$stmt->bindParam(1, $_GET["gid"]);
$stmt->execute();

$row = $stmt->fetch();
$ins = "insert into tblActive(Id, DriverId, FirstNameAmh, FatherNameAmh, GrandNameAmh, Photo) values(?, ?, ?, ?, ?, ?)";

$st = $dbc->prepare($ins);  
$val = array($row['Id'], $row['DriverId'], $row['FirstNameAmh'], $row['FatherNameAmh'], $row['GrandNameAmh'],  $row['Photo']);
$st->execute($val);

$sql = "delete from tblBackup where Id=?";
$stmt = $dbc->prepare($sql);
$stmt->bindParam(1, $_GET["gid"]);
$stmt->execute();

$dbc->commit();

编辑:
我得出的结论是,PHP 检索到的照片数据被 SQL 服务器视为 nvarchar(max) 类型而不是图像类型。因此,SQL 服务器抱怨它无法在图像数据类型列中插入 nvarchar(max)。有没有办法解决这个问题?

【问题讨论】:

  • 看起来您正试图将图像插入到 nvarchar 字段中
  • 这个错误有点欺骗性。我确定在设计表格时将照片列设置为image
  • 好的,给我们看一下表结构和代码
  • 我附上了简化代码。

标签: php sql-server pdo


【解决方案1】:

如果您处于开发阶段,我认为最好创建一个包含“插入选择”的存储过程,并以“gid”作为参数并从 php.ini 执行它。它不能成为你的解决方案吗?

【讨论】:

  • 它不在开发阶段,而是我正在向现有系统添加 Web 端。但确定我可以创建存储过程。我会考虑你的建议。
【解决方案2】:

我稍微更改了代码,现在它可以工作了。似乎问题是由准备好的语句引起的,虽然我不明白为什么。

$dbc->beginTransaction();
$sql = "select * from tblBackup where Id=?";
$stmt = $dbc->prepare($sql);
$stmt->bindParam(1, $_GET["gid"]);
$stmt->execute();

$row = $stmt->fetch();
$ins = "insert into tblActive(Id, DriverId, FirstNameAmh, FatherNameAmh, GrandNameAmh, Photo) values(?, ?, ?, ?, ?, ".$dbc->quote($row['Photo']).")";

$st = $dbc->prepare($ins);  
$val = array($row['Id'], $row['DriverId'], $row['FirstNameAmh'], $row['FatherNameAmh'], $row['GrandNameAmh']);
$st->execute($val);

$sql = "delete from tblBackup where Id=?";
$stmt = $dbc->prepare($sql);
$stmt->bindParam(1, $_GET["gid"]);
$stmt->execute();

$dbc->commit();

【讨论】:

    猜你喜欢
    • 2014-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-24
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多