php - poner - publicar formulario wordpress
Agregar 1 a un campo (7)
¿Cómo convierto las siguientes 2 consultas en 1 consulta
$sql = "SELECT level FROM skills WHERE id = $id LIMIT 1;";
$result = $db->sql_query($sql);
$level = (int) $db->sql_fetchfield(''level'');
$db->sql_freeresult($result);
++$level;
$sql = "UPDATE skills SET level = $level WHERE id = $id;";
$result = $db->sql_query($sql);
$db->sql_freeresult($result);
Lo estoy usando en un mod phpBB pero la esencia es que tomo el nivel, agrego uno y luego actualizo, parece que sería mucho más fácil y más rápido si pudiera hacerlo como una consulta.
Editar: $ id ya se ha forzado a ser un entero, por lo que no es necesario escaparse esta vez.
$ sql = "habilidades de ACTUALIZACIÓN SET level = level + 1 WHERE id = $ id";
¡Solo espero que estés desinfectando apropiadamente $ id en otro lugar de tu código!
De esta manera:
UPDATE skills
SET level = level + 1
WHERE id = $id
Con PDO y consulta preparada:
$query = $db->prepare("UPDATE skills SET level = level + 1 WHERE id = :id")
$query->bindValue(":id", $id);
$result = $query->execute();
Mat: Eso es lo que pega de la pregunta. No ha sido editado, así que lo atribuyo a un error en Markdown. Pero, curiosamente, me he dado cuenta.
También: sí, mysql_escape_string()
!
Me downmodded para esto?
$sql = "UPDATE skills SET level = level+1 WHERE id = $id";
$result = $db->sql_query($sql);
$db->sql_freeresult($result);
En el caso específico de Teifion, phpBB DDL enumera ese campo particular como NOT NULL, por lo que no hay peligro de incrementar NULL.
En el caso general, no debe usar NULL para representar cero. Incrementar NULL debería dar una respuesta de NULL. Si eres el tipo de desarrollador equivocado que piensa que NULL = 0, te alejas del teclado y encuentras otro pasatiempo, solo estás haciendo la vida difícil para el resto de nosotros. Por supuesto, esta es la industria de la computación y ¿quién es nosotros para decir que estás equivocado? Si no estás equivocado, usa
$sql = "UPDATE skills SET level = COALESCE(level,0)+1 WHERE id = $id";
... pero seamos sinceros: estás equivocado. Si todos comienzan en el nivel 0, entonces su DDL debería incluir
level INT DEFAULT ''0'' NOT NULL
en caso de que los programadores se olviden de configurarlo cuando creen un registro. Si no todo el mundo comienza en el nivel 0, omita el valor predeterminado y obligue al programador a proporcionar un valor en la creación. Si algunas personas están más allá de los niveles, para quienes tener un nivel es algo sin sentido, entonces agregar uno a su nivel por igual no tiene ningún significado. En ese caso, suelte el NOT NULL del DDL.
Qué tal si:
UPDATE skills SET level = level + 1 WHERE id = $id;
prueba esto
UPDATE skills SET level = level + 1 WHERE id = $id