tabla - ¿Cómo puedo usar mysqli/php para actualizar todos los registros después de que ya se haya ejecutado una consulta?
mysqli_fetch_array (2)
¿Por qué hacerlos uno a la vez? Puedes hacerlo en una consulta
$setCurrent = X;
$query = ''UPDATE myTable
SET `current` = (id = :current)'';
$stmt = $link->prepare($query);
$stmt->bindValue('':current'', $setCurrent);
$stmt->execute();
(y haciendo un uso incorrecto del hecho de que si id es igual a $ setCurrent, la parte entre () se resuelve en verdadero, que es 1.)
algunos explicando:
SELECT 10=10;
daría una especie de "VERDADERO". Pero como Mysql no da la verdad, da 1. Lo mismo vale para:
SELECT 10=20;
Esto es FALSO, entonces te da 0.
Ahora volvamos a su consulta: desea obtener un valor 0 para todos los registros para los cuales el id no es igual a algún número. Y quiere 1 cuando es igual: entonces tiene que comparar el valor de la identificación de la columna con $ setCurrent. Cuando coinciden, obtienes 1 y pones ese 1 en la columna "actual" Y cuando no coinciden, en todos los demás casos, obtienes un 0 y ese 0 entra en la columna Actual.
Y sí, esto también podría hacerse como:
UPDATE mytable
SET `current` = CASE id
WHEN $setCurrent THEN 1
ELSE 0
END CASE
o usando IF, pero la otra sintaxis es mucho más corta
se necesitan retoques de edición alrededor del nombre de la columna, ya que la palabra actual es una palabra reservada
Tengo un formulario de usuario que establece un solo registro "actual". No se puede establecer más de un registro a la vez a la vez. Entonces, le presento al usuario una lista desplegable, eligen el artículo que quieren establecer actual y presionan "ACTUALIZAR" en la parte inferior del formulario.
El PHP / Mysqli necesita entrar y establecer todos los registros de la columna "actual" a un valor de 0 y luego actualizar el del formulario a un valor de "1".
Inicialmente, simplemente hice un simple recuento de la cantidad de filas y ejecuté un montón de consultas para actualizar la columna a 0 o 1 si el contador de bucles = el ID de la fila. Bueno ... eso se rompió rápidamente cuando empecé a hacer pruebas en otras partes y los números índices superaron el número total de filas. Sí, ¡manera tonta de hacerlo inicialmente!
Esto es lo que traté de hacer con el código PHP / MySQL:
// $link is the database link defined elsewhere. This does work as I use it all over the place
$setCurrent = X; // This is the number passed from my form
$init_query = "SELECT id, current FROM myTable";
if ($stmt = $link->$prepare($init_query) {
$stmt->execute() or die ($stmt->error);
$stmt ->bind_result($id, $current)
while ($stmt->fetch()){
if ($id == $setCurrent){
$update_sql = "UPDATE myTable SET current =''1'' WHERE id=''".$setCurrent."''";
$stmt2 = $link->prepare($update_sql);
$stmt2->execute;
}
else {
$update_sql = "UPDATE myTable SET current =''0'' WHERE id=''".$id."''";
$stmt2 = $link->prepare($update_sql);
$stmt2->execute;
}
$stmt->close();
Esto falla y me da un error fatal: error no detectado: llamada a una función miembro ejecutar en booleano en .....
Me estoy desquiciando por esto y no puedo entender qué diablos está pasando. Han pasado unos años desde que trabajé en PHP / MySql y esta es mi primera versión de OO Mysqli. Por favor se gentil :)
Te faltan dos llaves de cierre. Uno para el primero if()
y el otro para while()