2017-02-28 57 views
0

我有兩個存儲相同數據的表。一個用於活動用戶,另一個用於非活動用戶。當用戶來到時,它將在活動表中進行搜索,如果未找到,則在非活動表中進行搜索。如果在非活動表中找到用戶信息,則應將其移至活動表並從非活動表中刪除。
這些表格有一列存儲照片。當我嘗試插入的信息,活動表,我得到以下錯誤:將圖像從一個SQL服務器表移動到另一個

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檢索到的照片數據被視爲nvarchar的(最大)類型而不是SQL服務器的圖像類型。因此,SQL服務器抱怨說它無法在圖像數據類型列中插入nvarchar(max)。有沒有辦法解決這個問題?

+0

看起來你試圖插入一個圖像到nvarchar字段 – paqash

+0

錯誤是一種欺騙。我確信,在設計桌子時,照片欄設置爲「圖像」。 – birraa

+0

好的,向我們展示表格結構和代碼 – paqash

回答

0

如果您正處於開發階段,我認爲最好是創建一個存儲過程,包括以「gid」作爲參數的「insert select」,並在php中執行它。它不能成爲你的解決方案嗎?

+0

這不是在開發階段,而是我在現有系統中添加一個Web端。但是我確定我可以創建存儲過程。我會考慮你的建議。 – birraa

0

我改變了一些代碼,現在它工作。似乎問題是由準備好的聲明引起的,儘管我不明白爲什麼。

$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(); 
相關問題