我正在使用此脚本更新到我的表中的列。
第一列'close_account'是枚举值'0'或'1',它们在我的数据库中显示为单选框。
第二列'account_status'是枚举值'Active'或'Deactivated',这在我的数据库中显示为下拉框列表。
在这种情况下,我不确定它们是下拉盒还是收音机盒的事实。
但我的问题是我试图通过运行以下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(); ?>
答案 0 :(得分: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
开始,在上面的情况下,索引2
为small
。此外,'5'
被视为x-large
的索引。
答案 1 :(得分: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';
再次,将一些数字替换为实际的用户ID号。