簡體   English   中英

無法運行查詢:SQLSTATE [42000]:[Microsoft] [SQL Server Native Client 11.0] [SQL Server]')'附近的語法不正確

[英]Failed to run query: SQLSTATE[42000]: [Microsoft][SQL Server Native Client 11.0][SQL Server]Incorrect syntax near ')'

我正在使用PDO連接到以天藍色運行的Microsoft Server,但不斷收到錯誤消息:

這是我編寫的功能(insertUser):

private function generateSalt()
{
    return dechex(mt_rand(0, 4453456454)) . dechex(mt_rand(0, 543545435));
}

private function hashPassword($originalPassword, $salt)
{
    for($round = 0; $round < 65536; $round++)
    {
        $password = hash('sha256', $password . $salt);
    }

    return $password;
}

private function insertUser()
{
    $salt = $this->generateSalt();
    $password = $this->hashPassword($_POST['password'], $salt);

    $query = "INSERT INTO dbo.[User]
                            ( Title ,
                              FirstName ,
                              MiddleName ,
                              LastName ,
                              Gender ,
                              DOB ,
                              Email ,
                              Phone ,
                              Mobile ,
                              HomeAddress ,
                              HomePostCode ,
                              HomeSuburb ,
                              HomeState ,
                              HomeCountry ,
                              BrowserDetails ,
                              IsActive ,
                              Password ,
                              Salt ,
                              LastLogin ,
                              CompanyID ,
                              Created ,
                              CreatedBy ,
                              LastModified ,
                              LastModifiedBy ,
                              Username ,
                              UserRole
                            )
                    VALUES  ( @title , -- Title - varchar(50)
                              @firstname , -- FirstName - varchar(100)
                              @middlename , -- MiddleName - varchar(100)
                              @lastname , -- LastName - varchar(100)
                              @gender , -- Gender - varchar(20)
                              @dob , -- DOB - datetime
                              @email , -- Email - varchar(200)
                              @phone , -- Phone - varchar(50)
                              @mobile , -- Mobile - varchar(50)
                              @homeaddress , -- HomeAddress - varchar(100)
                              @homepostcode , -- HomePostCode - varchar(10)
                              @homesuburb , -- HomeSuburb - varchar(50)
                              @homestate , -- HomeState - varchar(20)
                              @homecountry , -- HomeCountry - varchar(200)
                              @browserdetails , -- BrowserDetails - varchar(500)
                              1 , -- IsActive - bit
                              @password , -- Password - varchar(500)
                              @salt , -- Salt - varchar(50)
                              GETDATE() , -- LastLogin - datetime
                              @companyid , -- CompanyID - int
                              GETDATE() , -- Created - datetime
                              user , -- CreatedBy - varchar(50)
                              NULL , -- LastModified - datetime
                              NULL , -- LastModifiedBy - varchar(50)
                              @username , -- Username - varchar(50)
                              'user'  -- UserRole - varchar(30)
                            )";

    $query_params = array(          ':title' => $_POST['title'] ,
                                    ':firstname' => $_POST['firstname'] ,
                                    ':middlename' => $_POST['middlename'] ,
                                    ':lastname' => $_POST['lastname'] ,
                                    ':gender' => $_POST['gender'] ,
                                    ':dob' => $_POST['dob'] ,
                                    ':email' => $_POST['email'] ,
                                    ':phone' => $_POST['phone'] ,
                                    ':mobile' => $_POST['mobile'] ,
                                    ':homeaddress' => $_POST['homeaddress'] ,
                                    ':homepostcode' => $_POST['homepostcode'] ,
                                    ':homesuburb' => $_POST['homesuburb'] ,
                                    ':homestate' => $_POST['homestate'] ,
                                    ':homecountry' => $_POST['homecountry'] ,
                                    ':browserdetails' => $_POST['browserdetails'] ,
                                    ':password' => $password ,
                                    ':salt' => $salt ,
                                    ':companyid' => $_POST['companyid'] ,
                                    ':username' => $_POST['username']   );

    try
    {
        $stmt = $this->db->prepare($query);
        $result = $stmt->execute($query_params);
    }
    catch(PDOException $ex)
    {
        die("Failed to run query: " . $ex->getMessage());
    }

    // display json encode on the page for AJAX to read
    echo json_encode(array('error' , $result));
}

我收到的錯誤是這樣的:

無法運行查詢:SQLSTATE [42000]:[Microsoft] [SQL Server Native Client 11.0] [SQL Server]')'附近的語法不正確。

這讓我非常困惑的原因是,我使用發送的帖子數據在SQL Management Studio中手動重新創建了查詢,並且一切正常。 我什至嘗試創建一個臨時表並將其插入其中,但仍然沒有成功。 救命!

對於上下文,這是我要使用的帖子數據:

類別:1

  1. 用戶名:bhills_4993@veryrealemail.com
  2. 公司電子郵件:bhills_4993@veryrealemail.com
  3. 確認電子郵件:bhills_4993@veryrealemail.com
  4. 密碼:123
  5. 確認密碼:123
  6. 功能:registrationProcessCompany
  7. 類別:工作場所
  8. 職稱:女士
  9. 名:貝弗利
  10. 姓氏:Hills
  11. 公司名稱:Hills Corp
  12. 公司規模:希爾斯公司
  13. questdeptdiv:特定部門/部門
  14. 公司地址:Hills Corp
  15. 公司郊區:Hills Corp
  16. 公司郵政編碼:Hills Corp
  17. 公司類型:信息媒體和電信
  18. SportingGroupAge []:高級
  19. 州體育館:CA
  20. QuestAction:健康飲食,少喝酒
  21. 來源:電台

這是表格設計:

USE [junglegymSQL] GO

/****** Object:  Table [dbo].[User]    Script Date: 19/12/2013 8:28:32 PM ******/ SET ANSI_NULLS ON GO

SET QUOTED_IDENTIFIER ON GO

SET ANSI_PADDING ON GO

CREATE TABLE [dbo].[User](
    [UserId] [int] IDENTITY(1,1) NOT NULL,  
    [Title] [varchar](50) NULL,     
    [FirstName] [varchar](100) NOT NULL,    
    [MiddleName] [varchar](100) NULL,   
    [LastName] [varchar](100) NOT NULL,     
    [Gender] [varchar](20) NULL,    
    [DOB] [datetime] NULL,  
    [Email] [varchar](200) NOT NULL,    
    [Phone] [varchar](50) NULL,     
    [Mobile] [varchar](50) NULL,    
    [HomeAddress] [varchar](100) NULL,  
    [HomePostCode] [varchar](10) NULL,  
    [HomeSuburb] [varchar](50) NULL,    
    [HomeState] [varchar](20) NULL,     
    [HomeCountry] [varchar](200) NULL,  
    [BrowserDetails] [varchar](500) NULL,   
    [IsActive] [bit] NULL,  
    [Password] [varchar](500) NOT NULL,     
    [Salt] [varchar](50) NOT NULL,  
    [LastLogin] [datetime] NULL,    
    [CompanyID] [int] NULL,     
    [Created] [datetime] NULL,  
    [CreatedBy] [varchar](50) NULL,     
    [LastModified] [datetime] NULL,     
    [LastModifiedBy] [varchar](50) NULL,    
    [Username] [varchar](50) NOT NULL,  
    [UserRole] [varchar](30) NULL,  
CONSTRAINT [PK_users] PRIMARY KEY CLUSTERED  (
[UserId] 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].[User] ADD  DEFAULT ('User') FOR [UserRole] GO

ALTER TABLE [dbo].[User]  WITH CHECK ADD  CONSTRAINT [FK_User_Company] FOREIGN KEY([CompanyID]) REFERENCES [dbo].[Company] ([CompanyID]) GO

ALTER TABLE [dbo].[User] CHECK CONSTRAINT [FK_User_Company] GO

檢查單格麥克斯(')的值,sntax看起來不錯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM