No tiene ninguna utilidad poner N UPDATE cuando puedes hacerlo en uno. La sintaxis la puedes leer en el manual de referencia (recomiendo usar la version que esta en la web).
Por otro lado, el UPDATE funcionará en tu caso si y sólo si el valor de la variable $obra está llegando. Si la variable es nula, contiene un caracter vacío, o un valor inválido, evidentemente no realizará nada. Pero como no podemos ver de donde proviene, eso lo deberás verificar tu.
Ten en cuenta que NUNCA debes asumir que las variables contienen lo que supones. El 90% de los sproblemas de este tipo se producen porque la variable no contiene lo que el programador
supone que contiene, pero jamás se tomo el trabajo de verificar.
Validar es siempre la parte mas engorrosa de toda codificiación, pero es
fundamental.
Por otro lado, no debes usar en un msimo script fucniones por procedimietnos y funciones orientadas ao objetos. No son muy compatibles. O usas una, o usas la otra.
Además, debes también verificar que cuando se ejecuta una sentencia no se haya producido un error, y eso
tampoco lo estás haciendo...
NUNCA asumas que algo funcionó bien porque está bien escrito. Verifícalo.
Yo propondría algo como esto:
Código PHP:
function actualizarObras($obra){
$con = new mysqli("localhost", "root", "password", "mydb");
if ($con->connect_errno) {
echo "Fallo al contenctar a MySQL: (" . $con->connect_errno . ") ".$con->connect_error;
}
$query_select = "SELECT * FROM detalle_obra WHERE cod_obra = '$obra'";
$query_execute = $con->query($query_select);
// debes validr siempre que no haya fallado.
if(!$query_execute)
{echo "Error al ejecutar SELECT: " . $con->errno . " - " . $con->error;}
else
{
while($query_result = $query_execute->fetch_array()) {
$egre = $query_result['egresos'];
$ingre = $query_result['ingresos'];
$recepci = $query_result['recepcion'];
$combusre = $query_result['combustible_recepcion'];
$combuem = $query_result['combustible_emision'];
$conslt = "UPDATE obra
SET egresos = (egresos + $egre),
ingresos = (ingresos + $ingre),
recepcion = recepcion + $recepci),
combustible_recepcion = (combustible_recepcion + $combusre),
combustible_emision = (combustible_emision + $combuem)
WHERE obra.codigo = '$obra'";
$result = $con->query($conslt);
if($!result)
{echo "Error al ejecutar UPDATE: " . $con->errno . " - " . $con->error . "\r";
echo "Consulta: ".$conslt}
}
}
$con->close;
}
NOtarás que eliminé los apostrofes de los valores que se suman. Eso es porque no debe en SQL ponerse un valor numerico como cadena de texto, ya que es inencesario y obliga a conversiones implicitas. Por otro lado, poner una variable entre apostrfes esconde errores con ellas, ya que si un valor está llegando nulo no se ve si usas los apostrofes, pero si dispara un error si no está.