sql
  • sql-server
  • asp-classic
  • textarea
  • ado
  • 2010-07-15 47 views 0 likes 
    0

    (這是經典的ASP) 我確定這只是逃避文本的一種情況,但我還沒有發現任何東西。 我有一個textarea可能包含各種各樣的字符,我需要更新與該textarea中的任何內容的記錄,但我得到一個錯誤,打破我的SQL查詢,我積極的是有關的內容textarea。如何將textarea數據放入SQL Server數據庫?

    所以我有這樣的,只要我的SQL查詢:

    "UPDATE document SET displayheading='" & _ 
        stripillegal(request("txt_displayheading")) & _ 
        "', displayorder=" & displayorder & _ 
        ", shortdescription='" & stripillegal(request("txt_shortdescription")) & _ 
        "', document_note='" & request("document_note") ...blah blah blah 
    

    所以我不知道我怎麼含有textarea的,這樣我可以不破壞查詢更新記錄?

    +1

    什麼是你得到的錯誤? – 2010-07-15 14:39:11

    +3

    BTW:此代碼中存在SQL注入漏洞。 – JohnFx 2010-07-15 14:42:55

    +2

    考慮使用預先準備好的SQL語句或帶有參數的存儲過程,然後使用數據訪問middelware(例如ADO)來處理傳遞的參數值,並且您將獲得免費的「stripillegal」,「FormatDateText」等功能。 – onedaywhen 2010-07-15 14:48:31

    回答

    1

    newStr變量下面是避免動態的方式SQL並解決SQL注入潛力。它使用參數化查詢。這裏有一個SQL解決方案:

    DECLARE @DisplayHeading varchar(100) 
        DECLARE @DisplayOrder int 
        DECLARE @ShortDescription varchar(100) 
        DECLARE @DocumentNote varchar(100) 
    
        DECLARE @command nvarchar(500) 
        DECLARE @params nvarchar(500) 
    
        SET @command = N'UPDATE document 
         SET [email protected] 
         , [email protected] 
         , [email protected] 
         , [email protected] 
         --...blah blah blah' 
    
        SET @params = N'@DisplayHeading varchar(100), @DisplayOrder int, 
          @ShortDescription varchar(100), @DocumentNote varchar(100)' 
    
    -- Assign values to user variables. 
    
    EXEC sp_executesql @command, @params, @DisplayHeading, 
        @DisplayOrder, @ShortDescription, @DocumentNote 
    


    這裏就是你可以用ADO嘗試:

    cmd.CommandText = "UPDATE document " & _ 
         "SET [email protected], [email protected], " & _ 
         "[email protected], [email protected] " & _ 
         "--...blah blah blah" 
    
        cmd.Parameters.Add(New SqlParameter("@DisplayHeading", DisplayHeading)) 
        cmd.Parameters.Add(New SqlParameter("@DisplayOrder", DisplayOrder)) 
        cmd.Parameters.Add(New SqlParameter("@ShortDescription", ShortDescription)) 
        cmd.Parameters.Add(New SqlParameter("@DocumentNote", DocumentNote)) 
    
    1

    查詢將打破,如果有喜歡'的性格,你需要先替換它們:

    newStr = Replace("'", "''", request("txt_displayheading")) 
    

    而且在查詢中使用,而不是request("txt_displayheading"

    +0

    需要一個額外的)在那裏 – 2010-07-15 14:41:34

    +0

    你不想直接刪除它們。想象一下,如果使用stackoverflow來做到這一點,那麼這個評論中的「不」就會作爲「不」來進入數據庫。你只想用兩個單引號替換單引號。 – 2010-07-15 14:41:51

    +0

    不要刪除''',因爲他們可能會想要..更改爲'''',他們得到正確保存.. – 2010-07-15 14:42:36

    相關問題