Hola a todos!
Tengo un problema en php.
Trataba de generar un numero consecutivo para que luego se inserte en la base de datos en php. Lo que trato de realizar es que primero verifique si en la tabla tiene un dato en el campo y si no lo tiene, inserte el primer número.
Más o menos lo tengo pensado es de esta manera:
<?php
include 'conexión.php'; // conexión a base de datos
$codigo = 1;
$consulta = mysql_query("select `codigo` from `prueba_id` where `codigo` = $codigo");
if($consulta >0){
$cod_resultado= $consulta+$codigo;
mysql_query("INSERT INTO `prueba_id` (`Codigo`) VALUES ('$cod_resultado') ");
}
else {
mysql_query("INSERT INTO `prueba_id` (`Codigo`) VALUES ('$codigo') ");
}
?>
Sin embargo, al insertar en la base de datos me inserta 6. Y cuando vuelvo a ejecutar nuevamente no me vuelve a insertar nada. Se que debo meterle un while pero no se la sintaxis correcta para que funcione.
El propósito del código es para generar un numero consecutivo en el campo de la tabla: Codigo, dejando de lado la funcion autoincrement que viene como opción en mysql.
Muchas gracias de antemano por su ayuda!.
CitarEl propósito del código es para generar un numero consecutivo en el campo de la tabla: Codigo, dejando de lado la funcion autoincrement que viene como opción en mysql.
La mayoría de los motores de BD cuentan con la opción de auto-increment.
Lo que estas intentando hacer es peligroso. Si se realizan dos consultas o mas al mismo tiempo, estoy casi seguro de que se van a mezclar y vas a tener campos con códigos repetitivos. Precisamente por esto se invento el auto-increment, para evitar problemas de repetición.
De todos modos, lo que haces esta mal... simplemente saca el mayor numero actual, si mysql no lo encuentra, te devolverá un campo vació.
Usa MySQLI en vez de mysql. Este ultimo ya esta considerado como obsoleto y en futuras versiones de PHP sera eliminado.
<?php
// Conexion
$mysql = mysqli_connect('servidor','usuario','pass','base de datos');
$consulta = mysqli_query($mysql,'SELECT MAX(Codigo) as Codigo FROM prueba_id LIMIT 1');
$consulta = mysqli_fetch_array($consulta,MYSQLI_ASSOC);
// Si el codigo actual esta vacio o es 0, se convierte en 1.
// En caso contrario se le suma +1.
$codigo = (empty($consulta['Codigo']) ? 1 : $consulta['Codigo']+=1);
echo 'El codigo actual es: '.$codigo;
$consulta = mysqli_query($mysql,'INSERT INTO prueba_id (Codigo) VALUES ('.$codigo.')');
if(!$consulta){die('Error');}
?>
Saludos
Muchas gracias por la respuesta con base a tu publicación pude generar el siguiente código consecutivo:
function consecutivo(){
$consulta = mysql_query('SELECT MAX(`campo_id`) as `campo_id` FROM `tabla` LIMIT 1');//1
if(mysql_num_rows($consulta)>0)
{
$row=mysql_fetch_array($consulta);
$cod=$row[0];
$sig=$cod+1;
$Strsig = (string)$sig;
$formato = str_pad($Strsig, "6", "0", STR_PAD_LEFT);
}
else{
$sig=1;
$Strsig = (string)$sig;
$formato= str_pad($Strsig, "4", "0", STR_PAD_LEFT);
}
return $formato;
}
Pongo el código por si acaso es de utilidad. Gracias!!!