Por vezes temos a necessidade de inserir um determinado registo e caso este já exista na base de dados queremos actualizá-lo.
Neste caso o mais comum é fazer duas petições à base de dados. Fazemos uma consulta para ver se já existe esse registo e dependendo da resposta da base de dados actualizamos ou inserimos a informação desejada.
<?php
$db = mysqli_init();
if(mysqli_real_connect($db, '127.0.0.1', 'root', '1234', 'demos'))
{
// Consula para verificar se já existe registo na base de dados //
$query = "SELECT COUNT(id) AS valor FROM demos WHERE id=2 LIMIT 1;";
if(mysqli_real_query($db, $query))
{
$result = mysqli_store_result($db);
$data = mysqli_fetch_array($result, MYSQLI_ASSOC);
mysqli_free_result($result);
if($data['valor'] > 0)
{
// Como existe registo, se actualiza os valores //
$query = "UPDATE demos SET value='value' WHERE id=2 LIMIT 1;";
if(mysqli_real_query($db, $query))
{ echo "Actualizado..."; }
else
{ echo "Erro ao actualizar registo."; }
}
else
{
// Como não existe registo, se adiciona os valores //
$query = "INSERT INTO demos (id, name, value, obs) VALUES ('2', 'name', 'value', 'obs');";
if(mysqli_real_query($db, $query))
{ echo "Adicionado..."; }
else
{ echo "Erro ao inserir registo."; }
}
}
else { echo 'Erro na petição.'; };
}
else { echo 'Erro na conexão.'; };
// Total: 2 petições á base de dados //
mysqli_close($db);
?>
$db = mysqli_init();
if(mysqli_real_connect($db, '127.0.0.1', 'root', '1234', 'demos'))
{
// Consula para verificar se já existe registo na base de dados //
$query = "SELECT COUNT(id) AS valor FROM demos WHERE id=2 LIMIT 1;";
if(mysqli_real_query($db, $query))
{
$result = mysqli_store_result($db);
$data = mysqli_fetch_array($result, MYSQLI_ASSOC);
mysqli_free_result($result);
if($data['valor'] > 0)
{
// Como existe registo, se actualiza os valores //
$query = "UPDATE demos SET value='value' WHERE id=2 LIMIT 1;";
if(mysqli_real_query($db, $query))
{ echo "Actualizado..."; }
else
{ echo "Erro ao actualizar registo."; }
}
else
{
// Como não existe registo, se adiciona os valores //
$query = "INSERT INTO demos (id, name, value, obs) VALUES ('2', 'name', 'value', 'obs');";
if(mysqli_real_query($db, $query))
{ echo "Adicionado..."; }
else
{ echo "Erro ao inserir registo."; }
}
}
else { echo 'Erro na petição.'; };
}
else { echo 'Erro na conexão.'; };
// Total: 2 petições á base de dados //
mysqli_close($db);
?>
Gastamos 0.000035s em duas petições.
Mas será mesmo necessário tanto código e fazer realmente duas petições à base de dados?
Não se pode fazer o mesmo de uma forma mais simples?
(mais…)