1

我正在使用此脚本更新表中的列。

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

第二列“account_status”是一个枚举值“活动”或“停用”,它在我的数据库中显示为下拉框列表。

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

但是我的问题是我试图通过运行以下mysql查询来更新close_account和account_status,close_account需要更新为'1'并且account_status应该更新为'Deactivated'。目前由于某种原因只有“close_account”正在更新,但没有 account_status 有人可以告诉我为什么吗?

谢谢。

<? 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(); ?>
4

2 回答 2

3

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

在您的情况下,显然1枚举数据被解释为枚举索引(数字)。将字符串用于枚举数据,以提高可读性和使用率。

考虑一个例子:

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;

输出:

mysql> select * from enum_tb;
+---------+
| size    |
+---------+
| x-small |
| small   |
| x-large |
+---------+
3 rows in set (0.00 sec)

奇怪?

MySQL 在传递索引时存储实际的枚举值。枚举索引从 开始1,在上述情况下,索引2small。也'5'被认为是索引x-large

于 2013-03-09T14:58:34.050 回答
1

解决此类问题的系统方法是首先将问题隔离到 PHP 或数据库。最简单的方法是不使用 PHP 直接进入数据库。使用 MySQL 命令行实用程序 ( mysql),或使用 phpmyadmin 等图形工具。

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

UPDATE ptb_users 
SET close_account='1', 
    account_status = 'Deactivated'
WHERE user_id = somenumber

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

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

create table foo (
  user_id integer not null,
  bar enum('0', '1')
);

像这样的事情更为常见。

create table foo (
  user_id integer not null,
  bar enum('open', 'closed')
);

要更新这样的枚举,请使用字符串值。

update foo
set bar = 'closed'
where user_id = somenumber and bar = 'open';

同样,将 somenumber 替换为实际的用户 ID 号。

于 2013-03-09T14:59:17.063 回答