首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否未在mysql表中更新枚举值?

问是否未在mysql表中更新枚举值?
EN

Stack Overflow用户
提问于 2013-03-09 22:42:28
回答 2查看 8.2K关注 0票数 1

我正在使用这个脚本来更新我的表中的列。

第一列'close_account‘是枚举值'0’或'1‘,它们在我的数据库中显示为单选框。

第二列'account_status‘是枚举值'Active’或'Deactivated‘,它在我的数据库中显示为下拉框列表。

我不确定它们是下拉框还是单选框在这种情况下是否重要。

然而,我的问题是,我试图通过运行下面的mysql查询来更新close_account和account_status,close_account需要更新到'1‘,account_status应该更新到'Deactivated’。目前,由于某种原因,只有'close_account‘在更新,而不是account_status。有人能告诉我为什么吗?

谢谢。

代码语言:javascript
复制
<? ob_start(); ?>
<?php

require_once('includes/session.php');
require_once('includes/functions.php');
require('includes/_config/connection.php');

session_start();

    confirm_logged_in();

    if (isset ($_GET['to'])) {
    $user_to_id = $_GET['to'];


}


if (!isset($_GET['to']))
    exit('No user specified.');

$user_id = $_GET['to'];


$result = mysql_query("SELECT * FROM ptb_users WHERE user_id ='".$_SESSION['user_id']."' ");

if($result) 
{ 
mysql_query("UPDATE ptb_users SET close_account='1' WHERE user_id=".$_SESSION['user_id']."") 
or die(mysql_error());

mysql_query("UPDATE ptb_users SET account_status='Deactivated' WHERE user_id=".$_SESSION['user_id']."") 
or die(mysql_error());

header("Location: dashboard.php");

}
?>
<? ob_flush(); ?>
EN

回答 2

Stack Overflow用户

发布于 2013-03-09 22:58:34

对枚举数据使用数值总是令人困惑的。尤其是当枚举数据与枚举索引值重叠时。

使用字符串代替枚举数据,以获得更好的可读性和用途。

考虑一个例子:

代码语言:javascript
复制
DROP TABLE enum_tb;

CREATE TABLE enum_tb (size ENUM('x-small', 'small', 'medium', 'large', 'x-large') NOT NULL);

INSERT INTO enum_tb
VALUES ('x-small'), (2), ('5');

SELECT * FROM enum_tb;

输出:

代码语言:javascript
复制
mysql> select * from enum_tb;
+---------+
| size    |
+---------+
| x-small |
| small   |
| x-large |
+---------+
3 rows in set (0.00 sec)

令人惊讶?

当传递索引时,MySQL存储实际的枚举值。枚举索引从1开始,在上面的例子中,索引2是small。同时,'5'也可作为x-large的指标。

票数 3
EN

Stack Overflow用户

发布于 2013-03-09 22:59:17

解决此类问题的系统方法是首先将问题隔离到PHP或数据库中。要做到这一点,最简单的方法是不使用PHP直接访问数据库。使用MySQL命令行实用程序(mysql),或使用诸如phpmyadmin之类的图形工具。

使用这些工具之一连接到您的测试数据库。(不是您的生产数据库。始终练习安全测试。)从SQL提示符运行此查询。

代码语言:javascript
复制
UPDATE ptb_users 
SET close_account='1', 
    account_status = 'Deactivated'
WHERE user_id = somenumber

将somenumber替换为实际的现有用户id号。

话虽如此,枚举是一个数字,这是不寻常的。像这样声明枚举没有多大意义。

代码语言:javascript
复制
create table foo (
  user_id integer not null,
  bar enum('0', '1')
);

像这样的事情要常见得多。

代码语言:javascript
复制
create table foo (
  user_id integer not null,
  bar enum('open', 'closed')
);

要更新此类枚举,请使用字符串值。

代码语言:javascript
复制
update foo
set bar = 'closed'
where user_id = somenumber and bar = 'open';

同样,用实际的用户id号替换somenumber。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15311931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档