請教大家一個問題。有一張表test ,其有70個字段。
我寫了一個存儲過程來為字段賦值。IN iname varchar(255), IN idetail varchar(255)BEGIN
SET @sqlstr = CONCAT('UPDATE PERSON SET ',iname,' = \'',idetail,'\'');
PREPARE sqlstmt FROM @sqlstr;
EXECUTE sqlstmt;
DEALLOCATE PREPARE sqlstmt;
END如果字符串中不含有 \和' 號時一切正常,但是含有以上兩種符號的任意一種 都沒有辦法正常工作,
傳入前將\轉義成\\ '轉義成 \' 還是執行不了。。請大家幫忙找找原因 非常感謝

解决方案 »

  1.   

    CONCAT('UPDATE PERSON SET ',iname,'=''',idetail,'''') AS dd;
      

  2.   


    CONCAT('UPDATE PERSON SET ',iname,'=\'',idetail,'\'')你 只有代码判断一下是否有\、'
      

  3.   

    传入前把参数使用mysql_real_escape_string进行转换试试看。
      

  4.   

    SET @sqlstr = CONCAT('UPDATE PERSON SET ',replace(replace(iname,'\\','\\\\'),'\'','\\\''),' = \'',replace(replace(idetail,'\\','\\\\'),'\'','\\\''),'\'');改成这个就行了。
      

  5.   


    這個工作肯定是要做的。。
    第一,這個問題在我測試存儲過程的時候就出現了。
    第二,我在php中一定是會先mysql_real_escape_string再傳入的。所以,也沒有反應
      

  6.   

    mysql> select @iname;
    +--------+
    | @iname |
    +--------+
    | a\\b   |
    +--------+
    1 row in set (0.00 sec)mysql> select replace(@iname,'\\','\\\\');
    +-----------------------------+
    | replace(@iname,'\\','\\\\') |
    +-----------------------------+
    | a\\\\b                      |
    +-----------------------------+
    1 row in set (0.08 sec)mysql>上面的测试好象没有你所说的问题啊。
      

  7.   


    問題只出在 我所說的這個具體情況裡。
    生成一個和我說的情況一樣的存儲過程 從外部調用就知道怎麼回事了。。您的這函數,我貼到我的存儲過程裡試過了。從外部用navicate測試 只要\和’兩個符號不連接在一起都沒有問題。問題我暫時沒去處理。等我想明白,再弄好了,也沒辦法了。
    謝謝大家。過兩天過來看看,再結貼。
      

  8.   

    给出你的 create procedure 语句