【发布时间】: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