2015-05-05 28 views
0

這是我第一次使用MySQL enum數據類型,所以我真的不知道如何正確插入這種類型的數據。我有一個表包含一個列有枚舉類型(狀態欄),當我在這個表中插入一行時,狀態欄將包含一個值並不是說我插入,例如:插入MySQL枚舉列設置錯誤數據

define('INVALID_EMAIL_ADDRESS', 0); 
    define('EMAIL_EXIST',   1); 
    define('NO_MX_RECORDS',   2); 
    define('EMAIL_NOT_EXIST',  3); 
    define('EMAIL_CHECK_FAILS',  4); 

$query_emails = mysqli_query($db_link, "SELECT email_id, email_address FROM emails"); 
    while ($email_row = mysqli_fetch_array($query_emails)) { 
     $check_email = does_email_exist($email_row[1]); 
     echo "status: " . $check_email . " " . $email_row[1] . "<br>"; 
     switch($check_email) { 
     case INVALID_EMAIL_ADDRESS; 
      //echo $check_email . " " . $email_row[1] . "<br>"; 
      $query = mysqli_query($db_link, "UPDATE mail_list SET status = " . INVALID_EMAIL_ADDRESS . " WHERE email_id = " . $email_row[0]); 
      ++$num_invalid_emails; 
     break; 
     case EMAIL_EXIST; 
      echo $check_email . " -- " . $email_row[1] . "<br>"; // this line get echoed 
      $query = mysqli_query($db_link, "UPDATE mail_list SET status = " . EMAIL_EXIST . " WHERE email_id = " . $email_row[0]); 
      ++$num_email_exist; 
     break; 
     case NO_MX_RECORDS; 
      echo $check_email . " -- " . $email_row[1] . "<br>"; 
      $query = mysqli_query($db_link, "UPDATE mail_list SET status = " . NO_MX_RECORDS . " WHERE email_id = " . $email_row[0]); 
      ++$num_no_mx_records; 
     break; 
     case EMAIL_NOT_EXIST; 
      echo $check_email . " -- " . $email_row[1] . "<br>"; // this line get echoed too, but the other don't. 
      $query = mysqli_query($db_link, "UPDATE mail_list SET status = " . EMAIL_NOT_EXIST . " WHERE email_id = " . $email_row[0]); 
      ++$num_emails_not_exist; 
     break; 
     case EMAIL_CHECK_FAILS; 
     default; 
      $query = mysqli_query($db_link, "UPDATE mail_list SET status = " . EMAIL_CHECK_FAILS . " WHERE email_id = " . $email_row[0]); 
      ++$num_email_check_fails; 
     break; 
     } 
    } 

在該表中,一些的電子郵件存在,另一個不存在,我應該在此表格行中看到:EMAIL_NOT_EXISTEMAIL_EXIST,但我看到所有記錄都有NO_MX_RECORDS

我在這裏做錯了什麼?

+0

使用'echo'轉儲每個查詢並在MySQL中手動運行它。檢查是否發生同樣的情況。如果是這樣,你必須在MySQL中檢查你的枚舉。 –

回答

1

檢查您的數據庫,以及您的枚舉字段如何。

假設您使用的值從0到4,我認爲使用枚舉沒有用處。使用tinyint代替。

枚舉成爲有用的,如果你設置你的領域地位分貝像

'NOT VALID MAIL', 'MAIL NOT EXIST' // and so on... 

所以...選項是這樣的:

1)ALTER TABLE - 在MySQL中修改字段類型

ALTER TABLE `myTable` MODIFY COLUMNS `status` tinyint(1); 

如果你運行你的實際代碼將工作。

2)改變你的代碼

在定義使用

define('INVALID_EMAIL_ADDRESS', 0); 

是(對我來說)一個完美的解決方案....反正......如果有外地ENUM地位它應該像之前

'NOT VALID MAIL', 'MAIL NOT EXIST' // and so on... 

這個例子,你的定義將是

define('INVALID_EMAIL_ADDRESS', 'HOW I AM IN THE ENUM'); 

3) - MichałPrzybyłowicz有權利。有更好的幫助和信息,你應該傾倒我們的枚舉字段,HERE是如何。