Php mysql表中的枚举值未更新?
我正在使用此脚本更新我的表中的列 第一列“close_account”是枚举值“0”或“1”,它们在我的数据库中显示为单选框 第二列“account_status”是枚举值“Active”或“Deactivated”,在我的数据库中显示为下拉框列表 我不确定在这种情况下,它们是下拉框还是收音机框这一事实是否重要 然而,我的问题是,我试图通过运行以下mysql查询来更新close_帐户和account_状态,close_帐户需要更新为“1”,account_状态应该更新为“Deactivated”。由于某种原因,目前只有“关闭帐户”正在更新,而不是帐户状态。有人能告诉我为什么吗 谢谢Php mysql表中的枚举值未更新?,php,mysql,Php,Mysql,我正在使用此脚本更新我的表中的列 第一列“close_account”是枚举值“0”或“1”,它们在我的数据库中显示为单选框 第二列“account_status”是枚举值“Active”或“Deactivated”,在我的数据库中显示为下拉框列表 我不确定在这种情况下,它们是下拉框还是收音机框这一事实是否重要 然而,我的问题是,我试图通过运行以下mysql查询来更新close_帐户和account_状态,close_帐户需要更新为“1”,account_状态应该更新为“Deactivated”
<? 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(); ?>
对枚举数据使用数值总是令人困惑。尤其是当枚举数据与枚举索引值重叠时 在您的案例中,
1
enum数据被解释为enum索引(数字)。使用字符串作为枚举数据,以提高可读性和使用率
举个例子:
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
enum数据被解释为enum索引(数字)。使用字符串作为枚举数据,以提高可读性和使用率
举个例子:
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
处理此类问题的系统方法是首先将问题隔离到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。处理此类问题的系统方法是首先将问题隔离到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号。您知道可以在
update
语句中一次更新多个列吗“更新ptb_用户设置关闭\u帐户='1',帐户状态='Deactivated'WHERE user\u id=“.$\u SESSION['user\u id']]
-另外,请输入mysql\u error()
的值,如果查询无法正确运行,很有可能这会告诉您出了什么问题-我看到您正在以这条消息的形式死去,它向您显示了什么吗?如果您从页面中转储查询文本并手动运行会发生什么情况?还有。它们不再得到维护。看到了吗?相反,学习,并使用or-将帮助您决定哪一个。如果选择PDO,.数字枚举值会令人困惑。你能测试一下当你为一个账户设置close\u account='2'
时会发生什么吗?它是否存储close\u account='1'
?这里的第一个问题,请阅读如何操作。您知道可以在update
语句中一次更新多个列“更新ptb_用户设置关闭\u帐户='1',帐户状态='Deactivated'WHERE user\u id=“.$\u SESSION['user\u id']]
-另外,请输入mysql\u error()
的值,如果查询无法正确运行,很有可能这会告诉您出了什么问题-我看到您正在以这条消息的形式死去,它向您显示了什么吗?如果您从页面中转储查询文本并手动运行会发生什么情况?还有。它们不再得到维护。看到了吗?相反,学习,并使用or-将帮助您决定哪一个。如果选择PDO,.数字枚举值会令人困惑。你能测试一下当你为一个账户设置close\u account='2'
时会发生什么吗?它是否存储close_account='1'
?这里的第一个问题,请阅读如何操作。