Php 将映像从一个SQL server表移动到另一个SQL server表

Php 将映像从一个SQL server表移动到另一个SQL server表,php,sql-server,pdo,Php,Sql Server,Pdo,我有两个存储相同数据的表。一个用于活动用户,另一个用于非活动用户。当用户到来时,将在活动表中搜索该用户,如果未找到,则在非活动表中搜索该用户。如果在非活动表中找到用户信息,则应将其移动到活动表并从非活动表中删除 桌子上有一列用来存放照片。尝试将信息插入活动表时,出现以下错误: SQLSTATE[22018]: [Microsoft][SQL Server Native Client 11.0][SQL Server]Operand type clash: nvarchar(max) is inc

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

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();
编辑:

我得出的结论是,SQL server将PHP检索到的照片数据视为nvarchar(max)类型,而不是图像类型。正因为如此,SQLServer抱怨它无法在图像数据类型列中插入nvarchar(max)。有办法解决这个问题吗

如果您正处于开发阶段,我认为最好创建一个包含“insert select”和“gid”作为参数的存储过程,并从php执行它。这难道不是你的解决方案吗?

我对代码做了一点修改,现在它可以工作了。问题似乎是由事先准备好的声明引起的,尽管我不明白为什么

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

看起来您正在尝试将图像插入nvarchar字段。该错误有点欺骗性。我确信在设计表格时,photo列设置为
image
。好的,向我们展示表格结构和代码。我附加了一个简化的代码。它不在开发阶段,而是在现有系统中添加一个web端。但我肯定可以创建存储过程。我会考虑你的建议。