2013-09-16 2 views
0

У меня есть следующая таблица:Конверсия удалось при преобразовании даты и/или времени из символьной строки - но не знаю, почему

USE [junglegymSQL] 
GO 

ALTER TABLE [dbo].[UserSession] DROP CONSTRAINT [FK_UserSession_UserID] 
GO 

ALTER TABLE [dbo].[UserSession] DROP CONSTRAINT [DF__UserSessi__Creat__5CA1C101] 
GO 

ALTER TABLE [dbo].[UserSession] DROP CONSTRAINT [DF__UserSessi__Creat__5BAD9CC8] 
GO 

/****** Object: Table [dbo].[UserSession] Script Date: 16/09/2013 3:44:55 PM ******/ 
DROP TABLE [dbo].[UserSession] 
GO 

/****** Object: Table [dbo].[UserSession] Script Date: 16/09/2013 3:44:55 PM ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

SET ANSI_PADDING ON 
GO 

CREATE TABLE [dbo].[UserSession](
    [UserId] [int] NOT NULL, 
    [SessionId] [varchar](500) NOT NULL, 
    [Created] [datetime] NOT NULL, 
    [CreatedBy] [varchar](50) NOT NULL, 
    [LastModifed] [datetime] NULL, 
    [LastModifiedBy] [varchar](50) NULL, 
CONSTRAINT [PK_SessionID] PRIMARY KEY CLUSTERED 
(
    [SessionId] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) 
) 

GO 

SET ANSI_PADDING OFF 
GO 

ALTER TABLE [dbo].[UserSession] ADD DEFAULT (user_name()) FOR [Created] 
GO 

ALTER TABLE [dbo].[UserSession] ADD DEFAULT (getdate()) FOR [CreatedBy] 
GO 

ALTER TABLE [dbo].[UserSession] WITH CHECK ADD CONSTRAINT [FK_UserSession_UserID] FOREIGN KEY([UserId]) 
REFERENCES [dbo].[User] ([UserId]) 
GO 

ALTER TABLE [dbo].[UserSession] CHECK CONSTRAINT [FK_UserSession_UserID] 
GO 

Что я пытаюсь написать, используя следующий PHP:

$sessiontoken = dechex(mt_rand(0, 2147483647)) . dechex(mt_rand(0, 2147483647)); 

// Save our cookie 'qcore' with the users session id 
setcookie("qcore", $sessiontoken); 

$query = " 
    INSERT INTO dbo.UserSession ( 
     UserId , 
     SessionId 
    ) VALUES (
     :userid , 
     :sessionid 
    ) 
"; 

$query_params = array( 
    ':userid' => intval($row['UserId']), 
    ':sessionid' => $sessiontoken 
); 

try 
{ 
    // Execute the query to create the user 
    $stmt = $db->prepare($query); 
    $result = $stmt->execute($query_params); 
} 
catch(PDOException $ex) 
{ 
    // Note: On a production website, you should not output $ex->getMessage(). 
    // It may provide an attacker with helpful information about your code. 
    // die("Failed to run query: " . $ex->getMessage()); 
    die("Failed to run query: " . $ex->getMessage()); 
} 

Однако каждый раз, когда я делаю это, я получаю следующее сообщение об ошибке:

Failed to run query: SQLSTATE[22007]: [Microsoft][SQL Server Native Client 11.0][SQL Server]Conversion failed when converting date and/or time from character string.

Я проверил, и следующий лина e возвращает целое число:

':userid' => intval($row['UserId']), 

и учитывая, что моя вторая колонка является varchar, ну, я в замешательстве. Почему я вижу эту ошибку, когда я вообще не работаю с датами, и я передаю целочисленное значение?

ответ

2

Ваш столбец Created имеет тип DateTime и вы используете Varchar по умолчанию.

ALTER TABLE [dbo].[UserSession] ADD DEFAULT (user_name()) FOR [Created] 

похоже, что вы отменили Создано и созданоБыло.

+0

Gdamnit ... спасибо. Чувство теперь глупо! – Codingo

Смежные вопросы

 Смежные вопросы