¿El valor de enumeración no se actualiza en la tabla mysql?
Frecuentes
Visto 8,570 equipos
1
estoy usando este script para actualizar las columnas en mi tabla.
la primera columna 'close_account' es un valor de enumeración '0' o '1' y estos aparecen como cuadros de radio en mi base de datos.
la segunda columna 'account_status' es un valor de enumeración 'Activo' o 'Desactivado' y esto aparece como una lista desplegable en mi base de datos.
No estoy seguro de si el hecho de que sean un cuadro desplegable o cuadros de radio importa en este caso.
sin embargo, mi problema es que estoy tratando de actualizar close_account y account_status ejecutando la siguiente consulta mysql, close_account necesita actualizarse a '1' y account_status debería actualizarse a 'Desactivado'. en este momento, por alguna razón, solo se está actualizando 'close_account' pero no account_status. ¿Puede alguien decirme por qué?
Gracias.
<? 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(); ?>
2 Respuestas
3
Usar valores numéricos para datos enumerados siempre es confuso. Especialmente cuando los datos enumerados se superponen con los valores de índice de enumeración.
en tu caso aparentemente 1
enum-data se interpretó como enum-index (numérico). Utilice cadenas para datos de enumeración en su lugar para mejorar la legibilidad y el uso.
Considere un ejemplo:
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;
Salida:
mysql> select * from enum_tb;
+---------+
| size |
+---------+
| x-small |
| small |
| x-large |
+---------+
3 rows in set (0.00 sec)
¿sorprendente?
MySQL almacena los valores de enumeración reales cuando se pasa el índice. Los índices de enumeración comienzan desde 1
y en el índice de casos anterior 2
is small
. también '5'
fue considerado como índice de x-large
.
respondido 09 mar '13, 15:03
1
La forma sistemática de abordar problemas como este es aislar primero el problema en PHP o en la base de datos. La forma más fácil de hacerlo es ir directamente a la base de datos sin usar PHP. Utilice la utilidad de línea de comandos de MySQL (mysql
), o use una herramienta gráfica como phpmyadmin.
Utilice una de esas herramientas para conectarse a su base de datos de prueba. (No es su base de datos de producción. Practique siempre pruebas seguras). Ejecute esta consulta desde un indicador de SQL.
UPDATE ptb_users
SET close_account='1',
account_status = 'Deactivated'
WHERE user_id = somenumber
Reemplaza somenumber
con un número de identificación de usuario real y existente.
Habiendo dicho eso, es inusual que una enumeración sea un número. no hace mucho más tiene sentido tener una enumeración declarada como esta.
create table foo (
user_id integer not null,
bar enum('0', '1')
);
Algo así es mucho más común.
create table foo (
user_id integer not null,
bar enum('open', 'closed')
);
Para actualizar dicha enumeración, use los valores de cadena.
update foo
set bar = 'closed'
where user_id = somenumber and bar = 'open';
Nuevamente, reemplace algún número con un número de identificación de usuario real.
respondido 09 mar '13, 14:03
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas php mysql or haz tu propia pregunta.
Sabe que puede actualizar más de una columna a la vez en un
UPDATE
¿declaración?"UPDATE ptb_users SET close_account='1', account_status='Deactivated' WHERE user_id=".$_SESSION['user_id']
- también, inspeccione el valor demysql_error()
, si una consulta no se ejecuta correctamente, hay muchas posibilidades de que esto le diga qué salió mal. Veo que se está muriendo con este mensaje, ¿le muestra algo? - DaveRandom¿Qué sucede si descarga el texto de consulta de la página y lo ejecuta manualmente? - Matt Busche
También por favor, no uses
mysql_*
funciones en código nuevo. Ya no se mantienen y están oficialmente en desuso. Consulte las caja roja? Aprender acerca declaraciones preparadas en su lugar, y usa PDO or MySQLi - este artículo le ayudará a decidir cuál. Si elige DOP, aquí hay un buen tutorial. - DaveRandomlos valores numéricos enumerados son confusos. ¿Puedes probar lo que sucede cuando
SET close_account='2'
para una cuenta? ¿almacenaclose_account='1'
? - जलजनकPrimera pregunta aquí, por favor lea qué hacer cuando obtienes respuestas. - जलजनक