Trang 1 / 2 12 LastLast
Hiển thị kết quả từ 1 đến 10 / 17
  1. #1
    Tham gia
    09-06-2009
    Bài viết
    42
    Like
    0
    Thanked 1 Time in 1 Post

    Vấn đề khi xử lí giá trị có nhiều kí tự phức tạp?

    Mình muốn replace một vài giá trị trong SQL nhưng khi truy vấn nhưng bị báo lỗi sai cú pháp, vì giá trị tìm kiếm và thay thế của mình có nhiều kí tự " nên khi query SQL không hiểu lệnh bắt đầu và kết thúc chỗ nào:

    Code:
    SELECT REPLACE(option_value, '<script type="text/javascript"><!-- amazon_ad_tag = "whisky"; amazon_ad_width = "160"; amazon_ad_height = "600";//--></script> <script type="text/javascript" src="http://www.assoc-amazon.co.uk/s/ads.js"></script>', '<script type="text/javascript"><!-- google_ad_client = "pub-22038******xx";google_ad_slot = "6661998542";google_ad_width = 728;google_ad_height = 90;//--></script>')
    FROM wp_options;
    Ví dụ mình query command như trên thì báo lỗi SELECT REPLACE(option_value, '<script type="text/javascript"><!-- amazon_ad_tag = "whisky"

    Mong các bác hướng dẫn cho có cách nào để giải quyết vấn đề này không? Xin cảm ơn.
    Quote Quote

  2. #2
    Tham gia
    10-01-2009
    Location
    Hà Nội
    Bài viết
    148
    Like
    3
    Thanked 19 Times in 16 Posts
    Câu SELECT của bạn mới chỉ đưa ra giá trị cần REPLACE, chưa thấy đưa ra giá trị REPLACE tương ứng nên báo lỗi cú pháp.

    Ngoài ra nếu trong chuỗi xử lý có dấu ' thì bạn sử dụng 2 dấu ' để kí hiệu ' là phần tử trong chuỗi chứ không phải kí hiệu kết thúc chuỗi.

    Ví dụ SELECT 'I''m a boy';
    Oracle DBA - Hướng dẫn Oracle HCM Y!M red_devilic

  3. #3
    Tham gia
    01-04-2009
    Location
    Việt Nam
    Bài viết
    251
    Like
    0
    Thanked 10 Times in 10 Posts
    Query trên sai cú pháp - syntax -. Một kỹ thuật cổ điển thường dùng là "sql injection" : subString "--" trong Sql là comment line ==> lỗi cú pháp.

    Còn trong chuỗi có dấu ' hay " thì như Red Devilic nói ở trên.

    Văn Hiền.

  4. #4
    Tham gia
    05-11-2009
    Bài viết
    19
    Like
    0
    Thanked 0 Times in 0 Posts

    Rất hay ! Quá chuẩn

    Quote Được gửi bởi Red Devilic View Post
    Câu SELECT của bạn mới chỉ đưa ra giá trị cần REPLACE, chưa thấy đưa ra giá trị REPLACE tương ứng nên báo lỗi cú pháp.

    Ngoài ra nếu trong chuỗi xử lý có dấu ' thì bạn sử dụng 2 dấu ' để kí hiệu ' là phần tử trong chuỗi chứ không phải kí hiệu kết thúc chuỗi.

    Ví dụ SELECT 'I''m a boy';
    Bạn Red Devilic trả lời chuẩn quá.
    Xin nói thêm. Đúng là chuỗi của bạn quá phức tạp, khó kiểm tra.
    Để không báo lỗi trước khi đưa biến vào hàm. Bạn phải chịu khó thực hiện từng bước.
    Trường hợp của bạn, Sql sẽ trả về lỗi cú pháp là đúng. Không hiểu 'option_value' là gì?
    Chưa xét đến tham số 2 và 3 theo. Việc của bạn là:
    1/ Xem lại cú pháp của hàm Replace.
    2/ Việc bắt SQL thực hiện như vậy có quá đáng hay không Hoặc có cần thiết phải như thế không. Hí Hí
    Thân chào.

  5. #5
    Tham gia
    01-04-2009
    Location
    Việt Nam
    Bài viết
    251
    Like
    0
    Thanked 10 Times in 10 Posts
    Bạn Red Devilic trả lời chuẩn quá.
    là một mệnh đề sai, sai hoàn toàn !

    Câu query sai do "sql injection", QUOTED_IDENTIFIER default ON. Còn về ngữ nghĩa là đúng, chỉ cần bật :
    Code:
    SET QUOTED_IDENTIFIER OFF
    cho phép dùng lẫn ' với " như trong VB, PHP là chạy được - khử bỏ lỗi "sql injection"
    Code:
    /*
    SELECT REPLACE(option_value, '<script type="text/javascript"><!-- amazon_ad_tag = "whisky"; amazon_ad_width = "160"; amazon_ad_height = "600";//--></script> <script type="text/javascript" src="http://www.assoc-amazon.co.uk/s/ads.js"></script>', '<script type="text/javascript"><!-- google_ad_client = "pub-22038******xx";google_ad_slot = "6661998542";google_ad_width = 728;google_ad_height = 90;//--></script>')
    FROM wp_options;
    */
    SET QUOTED_IDENTIFIER OFF
    --
    declare @x nvarchar(100), @y nvarchar(100), @z nvarchar(100);
    set @x = N'Kiểm tra mệnh đề : Bạn Red Devilic trả lời chuẩn quá là sai! C/m : <script type="text/javascript"><!-- amazon_ad_tag = "whisky"; amazon_ad_width = "160"; amazon_ad_height = "600";//--></script> <script type="text/javascript" src="http://www.assoc-amazon.co.uk/s/ads.js"></script>';
    set @y = '<script type="text/javascript"><!-- amazon_ad_tag = "whisky"; amazon_ad_width = "160"; amazon_ad_height = "600";//--></script> <script type="text/javascript" src="http://www.assoc-amazon.co.uk/s/ads.js"></script>';
    set @z = '<script type="text/javascript"><!-- google_ad_client = "pub-22038******xx";google_ad_slot = "6661998542";google_ad_width = 728;google_ad_height = 90;//--></script>';
    --
    SELECT REPLACE(@x, @y, @z) 
    -- FROM wp_options;
    as KetQua;
    tuan-nda chắc không rành về SQL nên thấy cái đúng mà cho rằng nó sai, nên phân tích lại thên tệ.
    Code:
    Xin nói thêm. Đúng là chuỗi của bạn quá phức tạp, khó kiểm tra.
    Để không báo lỗi trước khi đưa biến vào hàm. Bạn phải chịu khó thực hiện từng bước.
    Trường hợp của bạn, Sql sẽ trả về lỗi cú pháp là đúng. Không hiểu 'option_value' là gì?
    Chưa xét đến tham số 2 và 3 theo. Việc của bạn là:
    1/ Xem lại cú pháp của hàm Replace.
    2/ Việc bắt SQL thực hiện như vậy có quá đáng hay không Hoặc có cần thiết phải như thế không 
    ???
    Link: http://tinyurl.com/4xnkagz
    Thứ trưởng Bộ Y tế tự phong mình là tiến sĩ : GD - DT !
    DT 0906837125

  6. #6
    Tham gia
    11-08-2007
    Bài viết
    80
    Like
    5
    Thanked 4 Times in 3 Posts
    Quote Được gửi bởi Van8Hien62 View Post
    là một mệnh đề sai, sai hoàn toàn !

    Câu query sai do "sql injection", QUOTED_IDENTIFIER default ON. Còn về ngữ nghĩa là đúng, chỉ cần bật :
    Code:
    SET QUOTED_IDENTIFIER OFF
    ....

    Link: http://tinyurl.com/4xnkagz
    Thứ trưởng Bộ Y tế tự phong mình là tiến sĩ : GD - DT !

    Rất nhiều lần muốn nói mà nghĩ lại thấy chán chẳng thèm nói rồi.
    Ko hiểu người ở đâu nữa, phát biểu được 10 câu thì 9 câu vòng vo tam quốc, sốt ruột, sốt ruột.

  7. #7
    Tham gia
    01-04-2009
    Location
    Việt Nam
    Bài viết
    251
    Like
    0
    Thanked 10 Times in 10 Posts
    Bạn có biết SQL, tôi sửa trên là sai, hay bạn không biết chạy, exec query ?
    DT 0906837125

  8. #8
    Tham gia
    31-08-2011
    Bài viết
    39
    Like
    0
    Thanked 5 Times in 5 Posts
    Đúng là thầy bói mù, xem voi ( họ thấy cái đúng của họ ) nên cãi nhau. Hơn thế họ phê phán, biện chứng như các bạn thấy trên.

    Khác với người khiếm thị - khiếm khuyết nên có thể thông cảm - còn ở đây là những chuyên viên, chuyên gia i-tờ, bình dân học vụ, họ tưởng kiến thức của họ ghê gớm, kinh hồn ( trong khi chưa thuộc hết từ khóa - Reserved Keywords, khái niệm cơ sở - IDENTIFIER, ... ) nên bình phẩm, chê cái đúng của người khác.
    Được sửa bởi Lagi2 lúc 22:57 ngày 20-09-2011

  9. #9
    Tham gia
    11-08-2007
    Bài viết
    80
    Like
    5
    Thanked 4 Times in 3 Posts
    Quote Được gửi bởi Lagi2 View Post
    Đúng là thầy bói mù, xem voi ( họ thấy cái đúng của họ ) nên cãi nhau. Hơn thế họ phê phán, biện chứng như các bạn thấy trên.

    Khác với người khiếm thị - khiếm khuyết nên có thể thông cảm - còn ở đây là những chuyên viên, chuyên gia i-tờ, bình dân học vụ, họ tưởng kiến thức của họ ghê gớm, kinh hồn ( trong khi chưa thuộc hết từ khóa - Reserved Keywords, khái niệm cơ sở - IDENTIFIER, ... ) nên bình phẩm, chê cái đúng của người khác.
    Đây là diễn đàn tin học chứ ko phải văn chương khoe chữ. Bạn vui lòng nói rõ được ko? Lấp la lấp lửng, đọc đến 5 lần mà vẫn ko hiểu ý của bạn cuối cùng là gì nữa.

  10. #10
    Tham gia
    31-08-2011
    Bài viết
    39
    Like
    0
    Thanked 5 Times in 5 Posts
    Chỉ cần thêm thiết lập : SET QUOTED_IDENTIFIER OFF vào là query trên là chạy được - whisky_x viết đúng - chỉ thiếu tùy chọn môi trường
    Code:
    -- Thiết lập môi trường :
    SET QUOTED_IDENTIFIER OFF
    -- Copy nguyên văn query whisky_x viết ở trên :
    SELECT REPLACE(option_value, '<script type="text/javascript"><!-- amazon_ad_tag = "whisky"; amazon_ad_width = "160"; amazon_ad_height = "600";//--></script> <script type="text/javascript" src="http://www.assoc-amazon.co.uk/s/ads.js"></script>', '<script type="text/javascript"><!-- google_ad_client = "pub-22038******xx";google_ad_slot = "6661998542";google_ad_width = 728;google_ad_height = 90;//--></script>')
    FROM wp_options;
    //Code trên chạy rất tốt.
    Sai chỗ nào hỡi các CHUYÊN DA Ms Sql Server ?!

    Chuyên viên i-tờ, bình dân học vụ đọc không biết cái nào sai, chỗ nào đúng nên đọc đến 5 lần mà vẫn ko hiểu là đương nhiên. Thầy bói xem voi.
    Được sửa bởi Lagi2 lúc 09:26 ngày 21-09-2011

Trang 1 / 2 12 LastLast

Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • Bạn không thể gửi file đính kèm
  • Bạn không thể sửa bài viết của mình
  •