mysql
  • integer
  • 2012-07-18 84 views 2 likes 
    2

    我已經遇到了MYSQL中的一個奇怪事情,這證明是非常令人費解的。mysql/PHP:更新空int字段插入值0

    我正在使用sql語句更新現有記錄。所有的更新工作正常,除非當它到達郵政編碼,如果zip的值是空的,它會插入一個0.如果該字段確實有一個值,它插入正確的值沒有任何問題。

    zip字段的數據類型是int(11)。

    這裏是查詢SQL語句:

    $sql= "UPDATE memberinfo SET firstname = '$firstname', lastname = '$lastname', zipcode='$zipcode', emailadr='$emailadr' WHERE memberid= '$memberid'"; 
    

    當您在更新,如果郵政編碼爲空之前呼應了這一點,它顯示zipcode = '',

    的0過得去MYSQL響應的東西或其他插入。

    我試着刪除zip值和MYSQL周圍的撇號拋出一個錯誤,所以這不是一個修復。

    有沒有人跑過這個或者你能提出一個解決方案?

    感謝您的任何建議。

    +1

    它進入一個零因爲你將類型設置爲int。爲了解決這個問題,將類型更改爲varchar,並允許它爲空 – 2012-07-18 21:40:33

    +0

    該字段在更新之前爲空。因爲記錄最初創建時未指定zipcode值。是否習慣使zipcodes varchar字段? – user1260310 2012-07-18 21:42:36

    +1

    我使zipcode字段varchar,因爲有些人添加破折號或字母到他們的zip。並與int,它不會工作。如果你想要它是int,但是是一個空值。不更新郵編='',只是離開了。 – 2012-07-18 21:43:54

    回答

    5
    $sql= "UPDATE memberinfo SET firstname = '$firstname', lastname = '$lastname', zipcode=" . (!$zipcode ? 'NULL' : (int)$zipcode) . ", emailadr='$emailadr' WHERE memberid= '$memberid'"; 
    

    在這種情況下 - 如果$zipcode是空的(空字符串或0) - NULL將被插入,與實際值,否則

    PS:請確保您的zipcode場可爲空

    PPS :現在你得到0,因爲mysql把空字符串轉換爲整數,這就是0

    +0

    這是一個很好的答案。不過,我想我會改變爲varchar,因爲Johnny上面提到的原因。英國和日本也有字母拉鍊。 – user1260310 2012-07-18 21:57:44

    +0

    這不起作用,因爲它想要保存文字字符串「NULL」,而不是空值。如果您刪除郵政編碼值的引號,它將起作用。 – TRiG 2015-06-08 10:47:29

    +0

    @TRiG單引號字符是字符串文字的PHP語法的必需部分。請再次檢查,一切正常:-)如果您不相信我 - 只需運行語句並在之後檢查$ sql變量內容。 – zerkms 2015-06-08 10:54:50

    1

    是的,一個空字符串,當插入INT字段時將被視爲0.如果你真的使用I NT並希望默認的字段值被插入(或者如果字段設置允許,則插入一個NULL值),那麼您不應該在郵政編碼值周圍放置單引號,而應將您的查詢邏輯更改爲嵌入郵政編碼的值= NULL或者從插入文件中完全排除。

    0

    這是舊的,但我正在使用bind_para語句來解決這個問題,並且想在mysql中將int更改爲varchar。所以我寫了一個小幫助函數,將空字符串轉換爲null。我去的想法時,我研究過類似的問題發送空字符串,日期變量 這是簡單的函數,是從被用於設置綁定的陣列稱爲參數

    function nullEmptyInt($inputVal){ 
        if($inputVal == '' || empty($inputVal)){ 
         return null; 
        }else{ 
         return (int)($inputVal); 
        } 
    } 
    
    相關問題