Вставить в столбец перечисления MySQL установить неверные данные

Я впервые использую тип данных перечисления MySQL, так что я действительно не знаю, как правильно вставить этот тип данных. У меня есть таблица содержит столбцы типа enum (столбец состояния), когда я вставляю строку в эту таблицу, столбец состояния будет содержать значение, которое я не вставляю, пример:

  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_EXIST или же EMAIL_EXIST, но я видел все записи имеет NO_MX_RECORDS,

Что я здесь не так делаю?

0

Решение

проверьте вашу базу данных и как ваше поле enum.

Предполагая, что вы используете значение от 0 до 4, я думаю, что использовать enum бесполезно. используйте вместо этого tinyint.

Enum станет полезным, если вы установите свой статус поля в db, как

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

так … варианты таковы:

1) Изменить таблицу — в 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) — Михал Пшибылович имеет право. чтобы иметь лучшую помощь и информацию, вы должны бросить нам поле enum, ВОТ я показываю.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]