我正在使用这个脚本来更新我的表中的列。
第一列'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(); ?>发布于 2013-03-09 22:58:34
对枚举数据使用数值总是令人困惑的。尤其是当枚举数据与枚举索引值重叠时。
使用字符串代替枚举数据,以获得更好的可读性和用途。
考虑一个例子:
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的指标。
发布于 2013-03-09 22:59:17
解决此类问题的系统方法是首先将问题隔离到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号替换somenumber。
https://stackoverflow.com/questions/15311931
复制相似问题