Pregunta

¿Cómo puedo activar los 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 phpBB mod pero la esencia es que me agarra el nivel, agregue una a continuación de la actualización, parece que sería mucho más fácil y más rápido si yo podría hacerlo como una consulta.

Editar: $id ya ha sido forzado a ser un número entero, por lo tanto hay manera de escapar es necesario este tiempo.

¿Fue útil?

Solución

Puedo obtener downmodded para esto?

$sql = "UPDATE skills SET level = level+1 WHERE id = $id";
$result = $db->sql_query($sql);
$db->sql_freeresult($result);

En Teifion del caso específico, el phpBB DDL listas de campo particular, como NO NULO, por lo que no hay peligro de que el incremento de NULL.

En el caso general, usted no debe utilizar NULL para representar el cero.El incremento de NULL debe dar una respuesta de NULL.Si usted es el tipo de equivocada desarrollador que piensa NULL=0, paso de teclado y buscar otro pasatiempo, sólo estás haciendo la vida difícil para el resto de nosotros.Por supuesto, este es el equipo de la industria y quienes somos nosotros para decirles que usted está equivocado?Si no se equivoca, el uso de

$sql = "UPDATE skills SET level = COALESCE(level,0)+1 WHERE id = $id";

...pero seamos realistas:usted está equivocado.Si todo el mundo empieza en el nivel 0, entonces su DDL debe incluir

level INT DEFAULT '0' NOT NULL

en caso de que los programadores se olvide de establecer cuando se crea un registro.Si no todo el mundo empieza en el nivel 0, luego pase el DEFECTO y fuerza al programador especificar un valor en la creación.Si algunas personas están más allá de los niveles, para quien tener un nivel es una cosa sin sentido, a continuación, agregar uno a su nivel, igualmente, no tiene sentido.En ese caso, la caída de las NO NULAS de la DDL.

Otros consejos

De esta manera:

UPDATE skills
SET level = level + 1
WHERE id = $id

Con PDO y preparado consulta:

$query = $db->prepare("UPDATE skills SET level = level + 1 WHERE id = :id")
$query->bindValue(":id", $id);
$result = $query->execute();

$sql = "UPDATE CONJUNTO de habilidades de nivel = nivel + 1 where id = $id";

Sólo espero que estén correctamente la esterilización $id a otra parte en el código!

intente esto

UPDATE skills SET level = level + 1 WHERE id = $id

Cómo acerca de:

UPDATE skills SET level = level + 1 WHERE id = $id;

Alfombra:Que es lo que pega en la pregunta.No ha sido editado, así que se lo atribuyo a un error en las Rebajas.Pero, por extraño que parezca, me he dado cuenta.

También:sí, mysql_escape_string()!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top