FAQ
La funcion mysql_insert_id.. en una base de datos a la que van a acceder
multiples clientes sea confiable esta función de PHP..?.

con que otras funciones podemos trabajar, para devolver un valor
autoincrement desconocido generado despues de un insert, para luego
insertarlo en otra tabla, ?

--
Agradecido.

Hahmael Tâher.

Search Discussions

  • Mauricio Cuenca at Dec 18, 2009 at 9:22 am
    Recomiendo que hagas una transacción, así se garantiza la atomicidad
    de la operación.

    Ten en cuenta que las transacciones
    solo son soportadas en ciertas versiones de MySQL y usando el motor
    InnoDB.

    --
    Mauricio
    On Dec 18, 2009, at 8:12, hahmael wrote:

    La funcion mysql_insert_id.. en una base de datos a la que van a
    acceder
    multiples clientes sea confiable esta función de PHP..?.

    con que otras funciones podemos trabajar, para devolver un valor
    autoincrement desconocido generado despues de un insert, para luego
    insertarlo en otra tabla, ?

    --
    Agradecido.

    Hahmael Tâher.
  • Hahmael at Dec 18, 2009 at 3:32 pm
    Si es muy cierto si no estoy mal desde la version cinco. y solo Innodb es
    transacional, pero como manejaria esto con PHP?.explico un poco mejor en que
    consiste todo..

    Tengo la siguiente duda, poseo 3 tablas que corresponden a:
    -------------------------------------------------------------
    1. TABLE ORDENES
    no_orden INT Primary Key
    fecha_ordeb DATETIME
    estado_orden VARCHAR
    ----------------------------------------------------------------
    2. TABLE DETALLES ORDENES
    id_ordenes INT Primary Key
    no_orden INT Foreign key
    Cod_producto INT FK
    ----------------------------------------------------------------
    3.TABLE PRODUCTOS
    Cod_producto INT PK
    name_product VARCHAR
    description_product TEXT
    Costo_producto DECIMAL
    Rank_producto INT

    -----------------------------------------------------------------------

    La lógica es la siguiente un usuario realiza una orden, con una serie de
    productos el usuario envía, el sistema genera una No de Orden el cual es un
    valor único por lo tanto es una PK en table Ordenes, luego almacena uno a
    uno los productos que envía en la tabla Detalles la cual cada producto
    estará relacionado con su numero de orden correspondiente, por lo tanto una
    orden puede tener muchos detalles que realmente son productos ya existentes,
    la Duda radica en la generación de ese numero de orden, de que manera podría
    generarlo, si dejo un autoincremente en INT estaria bien, pero necesito
    tener ese identificativo único al momento de crear para luego poder realizar
    el insert de productos de esa orden, pero para ello al momento de realizar
    la primera ejecución que es el insert ordenes debo conocer es ID sino no
    podre insertas en detalles, esto evitando colisiones o que un usuario tome
    un numero de orden que no corresponde.

    Espero alguien pueda entenderme y orientarme, estoy un poco
    confundido..espero no sea la cafeína.

    2009/12/18 Mauricio Cuenca <macuenca@gmail.com>
    Recomiendo que hagas una transacción, así se garantiza la atomicidad de la
    operación.

    Ten en cuenta que las transacciones
    solo son soportadas en ciertas versiones de MySQL y usando el motor InnoDB.

    --
    Mauricio


    On Dec 18, 2009, at 8:12, hahmael wrote:

    La funcion mysql_insert_id.. en una base de datos a la que van a acceder
    multiples clientes sea confiable esta función de PHP..?.

    con que otras funciones podemos trabajar, para devolver un valor
    autoincrement desconocido generado despues de un insert, para luego
    insertarlo en otra tabla, ?

    --
    Agradecido.

    Hahmael Tâher.

    --
    Agradecido.

    Hahmael Tâher.
  • Philipp Keweloh at Dec 18, 2009 at 3:45 pm

    El 18 de diciembre de 2009 16:32, hahmael escribió:

    Si es muy cierto si no estoy mal desde la version cinco. y solo Innodb es
    transacional, pero como manejaria esto con PHP?.explico un poco mejor en
    que
    consiste todo..

    Tengo la siguiente duda, poseo 3 tablas que corresponden a:
    -------------------------------------------------------------
    1. TABLE ORDENES
    no_orden INT Primary Key
    fecha_ordeb DATETIME
    estado_orden VARCHAR
    ----------------------------------------------------------------
    2. TABLE DETALLES ORDENES
    id_ordenes INT Primary Key
    no_orden INT Foreign key
    Cod_producto INT FK
    ----------------------------------------------------------------
    3.TABLE PRODUCTOS
    Cod_producto INT PK
    name_product VARCHAR
    description_product TEXT
    Costo_producto DECIMAL
    Rank_producto INT

    -----------------------------------------------------------------------

    La lógica es la siguiente un usuario realiza una orden, con una serie de
    productos el usuario envía, el sistema genera una No de Orden el cual es un
    valor único por lo tanto es una PK en table Ordenes, luego almacena uno a
    uno los productos que envía en la tabla Detalles la cual cada producto
    estará relacionado con su numero de orden correspondiente, por lo tanto una
    orden puede tener muchos detalles que realmente son productos ya
    existentes,
    la Duda radica en la generación de ese numero de orden, de que manera
    podría
    generarlo, si dejo un autoincremente en INT estaria bien, pero necesito
    tener ese identificativo único al momento de crear para luego poder
    realizar
    el insert de productos de esa orden, pero para ello al momento de realizar
    la primera ejecución que es el insert ordenes debo conocer es ID sino no
    podre insertas en detalles, esto evitando colisiones o que un usuario tome
    un numero de orden que no corresponde.

    Espero alguien pueda entenderme y orientarme, estoy un poco
    confundido..espero no sea la cafeína.

    2009/12/18 Mauricio Cuenca <macuenca@gmail.com>
    Recomiendo que hagas una transacción, así se garantiza la atomicidad de la
    operación.

    Ten en cuenta que las transacciones
    solo son soportadas en ciertas versiones de MySQL y usando el motor InnoDB.
    --
    Mauricio


    On Dec 18, 2009, at 8:12, hahmael wrote:

    La funcion mysql_insert_id.. en una base de datos a la que van a acceder
    multiples clientes sea confiable esta función de PHP..?.

    con que otras funciones podemos trabajar, para devolver un valor
    autoincrement desconocido generado despues de un insert, para luego
    insertarlo en otra tabla, ?

    --
    Agradecido.

    Hahmael Tâher.

    --
    Agradecido.

    Hahmael Tâher.

    Será la cafeína, ¿conoces mysql_insert_id [1]?

    [1] http://es.php.net/mysql_insert_id

    --
    Philipp Keweloh

    "Si lo que vas a decir no es más bello que el silencio: no lo digas."
    Proverbio árabe
  • Mauricio Cuenca at Dec 18, 2009 at 7:10 pm
    Puedes utilizar mysql_insert_id(), pero no te fíes de esa función. Tu
    aplicación simplemente no será escalable, qué sucederá si en otro
    proceso manejado por la misma instancia de la conexión se inserta otra
    fila en el intermedio de la operación de inserción y selección ?

    Claro, esto no va a pasar si tu base de datos es MyIsam porque la
    tabla estará bloqueada mientras se inserta, etc, etc.

    Mi punto es que pueden existir diversas variables inesperadas debido a
    la concurrencia, por ese motivo las bases de datos soportan
    transacciones y es la única manera de garantizar la integridad de los
    datos.

    Seguro mysql_insert_id() te puede funcionar perfectamente si tu
    aplicación es pequeña y no tendrá simultaneidad. Pero si optas por
    la solución rápida, es bueno que lo hagas teniendo en cuenta que
    existen soluciones más óptimas y estar preparado para llevarlas a
    cabo en caso de que sean necesarias.

    --
    Mauricio
    On Dec 18, 2009, at 16:45, Philipp Keweloh wrote:

    El 18 de diciembre de 2009 16:32, hahmael <hahmael@gmail.com> escrib
    ió:
    Si es muy cierto si no estoy mal desde la version cinco. y solo
    Innodb es
    transacional, pero como manejaria esto con PHP?.explico un poco
    mejor en que
    consiste todo..

    Tengo la siguiente duda, poseo 3 tablas que corresponden a:
    -------------------------------------------------------------
    1. TABLE ORDENES
    no_orden INT Primary Key
    fecha_ordeb DATETIME
    estado_orden VARCHAR
    ----------------------------------------------------------------
    2. TABLE DETALLES ORDENES
    id_ordenes INT Primary Key
    no_orden INT Foreign key
    Cod_producto INT FK
    ----------------------------------------------------------------
    3.TABLE PRODUCTOS
    Cod_producto INT PK
    name_product VARCHAR
    description_product TEXT
    Costo_producto DECIMAL
    Rank_producto INT

    ---
    --------------------------------------------------------------------

    La lógica es la siguiente un usuario realiza una orden, con una seri
    e de
    productos el usuario envía, el sistema genera una No de Orden el cua
    l es un
    valor único por lo tanto es una PK en table Ordenes, luego almacena
    uno a
    uno los productos que envía en la tabla Detalles la cual cada produc
    to
    estará relacionado con su numero de orden correspondiente, por lo ta
    nto una
    orden puede tener muchos detalles que realmente son productos ya
    existentes,
    la Duda radica en la generación de ese numero de orden, de que maner
    a podría
    generarlo, si dejo un autoincremente en INT estaria bien, pero
    necesito
    tener ese identificativo único al momento de crear para luego poder
    realizar
    el insert de productos de esa orden, pero para ello al momento de
    realizar
    la primera ejecución que es el insert ordenes debo conocer es ID sin
    o no
    podre insertas en detalles, esto evitando colisiones o que un
    usuario tome
    un numero de orden que no corresponde.

    Espero alguien pueda entenderme y orientarme, estoy un poco
    confundido..espero no sea la cafeína.

    2009/12/18 Mauricio Cuenca <macuenca@gmail.com>
    Recomiendo que hagas una transacción, así se garantiza la atomicid ad de la
    operación.

    Ten en cuenta que las transacciones
    solo son soportadas en ciertas versiones de MySQL y usando el
    motor InnoDB.
    --
    Mauricio


    On Dec 18, 2009, at 8:12, hahmael wrote:

    La funcion mysql_insert_id.. en una base de datos a la que van a
    acceder
    multiples clientes sea confiable esta función de PHP..?.

    con que otras funciones podemos trabajar, para devolver un valor
    autoincrement desconocido generado despues de un insert, para luego
    insertarlo en otra tabla, ?

    --
    Agradecido.

    Hahmael Tâher.

    --
    Agradecido.

    Hahmael Tâher.


    Será la cafeína, ¿conoces mysql_insert_id [1]?

    [1] http://es.php.net/mysql_insert_id

    --
    Philipp Keweloh

    "Si lo que vas a decir no es más bello que el silencio: no lo digas.
    " Proverbio árabe
  • Hackob - at Dec 22, 2009 at 1:58 pm
    Un saludo a todos,

    Este tema no podría solucionarse definiendo CONSTRAINT's o FOREIGN
    KEY's en las tablas?

    --
    hackob
    hackob@hackob.me
    twitter.com/hackob
    http://hackob.me
  • Guillermo Rodriguez at Dec 18, 2009 at 3:48 pm
    La funcion mysql_insert_id es confiable cuando pasas como parametro el
    puntero
    de la conexion que usaste para realizar el insert como aqui:

    $con = mysql_connect(...);
    $id = mysql_insert_id($con);

    Esto hace que solo procese las transacciones realizadas por esa conexion en
    especifico y no choque con otros usuarios, pues cada conexion es diferente
    aunque tenga el mismo origen.

    Saludos.



    El 18 de diciembre de 2009 08:32, hahmael <hahmael@gmail.com> escribió:
    Si es muy cierto si no estoy mal desde la version cinco. y solo Innodb es
    transacional, pero como manejaria esto con PHP?.explico un poco mejor en
    que
    consiste todo..

    Tengo la siguiente duda, poseo 3 tablas que corresponden a:
    -------------------------------------------------------------
    1. TABLE ORDENES
    no_orden INT Primary Key
    fecha_ordeb DATETIME
    estado_orden VARCHAR
    ----------------------------------------------------------------
    2. TABLE DETALLES ORDENES
    id_ordenes INT Primary Key
    no_orden INT Foreign key
    Cod_producto INT FK
    ----------------------------------------------------------------
    3.TABLE PRODUCTOS
    Cod_producto INT PK
    name_product VARCHAR
    description_product TEXT
    Costo_producto DECIMAL
    Rank_producto INT

    -----------------------------------------------------------------------

    La lógica es la siguiente un usuario realiza una orden, con una serie de
    productos el usuario envía, el sistema genera una No de Orden el cual es un
    valor único por lo tanto es una PK en table Ordenes, luego almacena uno a
    uno los productos que envía en la tabla Detalles la cual cada producto
    estará relacionado con su numero de orden correspondiente, por lo tanto una
    orden puede tener muchos detalles que realmente son productos ya
    existentes,
    la Duda radica en la generación de ese numero de orden, de que manera
    podría
    generarlo, si dejo un autoincremente en INT estaria bien, pero necesito
    tener ese identificativo único al momento de crear para luego poder
    realizar
    el insert de productos de esa orden, pero para ello al momento de realizar
    la primera ejecución que es el insert ordenes debo conocer es ID sino no
    podre insertas en detalles, esto evitando colisiones o que un usuario tome
    un numero de orden que no corresponde.

    Espero alguien pueda entenderme y orientarme, estoy un poco
    confundido..espero no sea la cafeína.

    2009/12/18 Mauricio Cuenca <macuenca@gmail.com>
    Recomiendo que hagas una transacción, así se garantiza la atomicidad de la
    operación.

    Ten en cuenta que las transacciones
    solo son soportadas en ciertas versiones de MySQL y usando el motor InnoDB.
    --
    Mauricio


    On Dec 18, 2009, at 8:12, hahmael wrote:

    La funcion mysql_insert_id.. en una base de datos a la que van a acceder
    multiples clientes sea confiable esta función de PHP..?.

    con que otras funciones podemos trabajar, para devolver un valor
    autoincrement desconocido generado despues de un insert, para luego
    insertarlo en otra tabla, ?

    --
    Agradecido.

    Hahmael Tâher.

    --
    Agradecido.

    Hahmael Tâher.
  • Denyl Meneses Guillén at Dec 18, 2009 at 3:50 pm
    Yo te recomiendo que no trabajes con autoincrement, maneaj tus propios
    ID, podrias tener una tabla de ID
    del tipo NOMBRE_TABLA , ID_INI , donde indicas el nombre de tu tabla y
    el ID de inicio y si deseas uno de fin.

    cuando obtienes ese ID por db se bloquea el registro asi el siguiente
    que genere su nuevo ID tiene que esperar a que se termine la transacción.
    deberias manejar tanbien los TRY CATCH para que guardes en el detale
    siempre y cuando se haya grabado en la cabecera y tengas el ID , de esta
    forma no tendras detalles sin cabeceras
    es decir si bien por DB lo controlas tambien sería bueno que lo
    controles por programa.

    Para hacerlo mas facil create una clase de correlativos,a si podras
    utilizar la misma clase para diversas tablas, pero como te digo, yo te
    recomiendo que no uses autoincrement.
    Saludos.



    hahmael wrote:
    Si es muy cierto si no estoy mal desde la version cinco. y solo Innodb es
    transacional, pero como manejaria esto con PHP?.explico un poco mejor en que
    consiste todo..

    Tengo la siguiente duda, poseo 3 tablas que corresponden a:
    -------------------------------------------------------------
    1. TABLE ORDENES
    no_orden INT Primary Key
    fecha_ordeb DATETIME
    estado_orden VARCHAR
    ----------------------------------------------------------------
    2. TABLE DETALLES ORDENES
    id_ordenes INT Primary Key
    no_orden INT Foreign key
    Cod_producto INT FK
    ----------------------------------------------------------------
    3.TABLE PRODUCTOS
    Cod_producto INT PK
    name_product VARCHAR
    description_product TEXT
    Costo_producto DECIMAL
    Rank_producto INT

    -----------------------------------------------------------------------

    La lógica es la siguiente un usuario realiza una orden, con una serie de
    productos el usuario envía, el sistema genera una No de Orden el cual es un
    valor único por lo tanto es una PK en table Ordenes, luego almacena uno a
    uno los productos que envía en la tabla Detalles la cual cada producto
    estará relacionado con su numero de orden correspondiente, por lo tanto una
    orden puede tener muchos detalles que realmente son productos ya existentes,
    la Duda radica en la generación de ese numero de orden, de que manera podría
    generarlo, si dejo un autoincremente en INT estaria bien, pero necesito
    tener ese identificativo único al momento de crear para luego poder realizar
    el insert de productos de esa orden, pero para ello al momento de realizar
    la primera ejecución que es el insert ordenes debo conocer es ID sino no
    podre insertas en detalles, esto evitando colisiones o que un usuario tome
    un numero de orden que no corresponde.

    Espero alguien pueda entenderme y orientarme, estoy un poco
    confundido..espero no sea la cafeína.

    2009/12/18 Mauricio Cuenca <macuenca@gmail.com>

    Recomiendo que hagas una transacción, así se garantiza la atomicidad de la
    operación.

    Ten en cuenta que las transacciones
    solo son soportadas en ciertas versiones de MySQL y usando el motor InnoDB.

    --
    Mauricio


    On Dec 18, 2009, at 8:12, hahmael wrote:

    La funcion mysql_insert_id.. en una base de datos a la que van a acceder
    multiples clientes sea confiable esta función de PHP..?.

    con que otras funciones podemos trabajar, para devolver un valor
    autoincrement desconocido generado despues de un insert, para luego
    insertarlo en otra tabla, ?

    --
    Agradecido.

    Hahmael Tâher.
    --
    Denyl Meneses Guillén
    Dpto. Sistemas
    GRUPO DELTRON S.A
    Telf: 415 0101 anexo 1223

    Calle Raúl Rebagliati 170
    Urb. Santa Catalina - La Victoria

    -----------------------------------------------------------------
    "I know not with what weapons World War III will be fought, but World War IV will be fought with sticks and stones."
  • Hahmael at Dec 18, 2009 at 4:11 pm
    Graciasa a todos, hasta el momento pienso en realizar un bloqueo de tabla
    select [campos] from [tabla] for update.. antes de hacer el insert y la
    correspondiente recuperación
    Combinado con la función mysql_insert_id()...y puntero de conexion... creo
    de este modo podría reducir un margen de error, tambien usar ene sta tabla
    el motor transaccional innodb.

    Denyl gracias por lo de TRY CATCH..lo tendré en cuenta también...





    2009/12/18 Denyl Meneses Guillén <denyl.meneses@consulting.com.pe>
    Yo te recomiendo que no trabajes con autoincrement, maneaj tus propios ID,
    podrias tener una tabla de ID
    del tipo NOMBRE_TABLA , ID_INI , donde indicas el nombre de tu tabla y el
    ID de inicio y si deseas uno de fin.

    cuando obtienes ese ID por db se bloquea el registro asi el siguiente que
    genere su nuevo ID tiene que esperar a que se termine la transacción.
    deberias manejar tanbien los TRY CATCH para que guardes en el detale
    siempre y cuando se haya grabado en la cabecera y tengas el ID , de esta
    forma no tendras detalles sin cabeceras
    es decir si bien por DB lo controlas tambien sería bueno que lo controles
    por programa.

    Para hacerlo mas facil create una clase de correlativos,a si podras
    utilizar la misma clase para diversas tablas, pero como te digo, yo te
    recomiendo que no uses autoincrement.
    Saludos.




    hahmael wrote:

    Si es muy cierto si no estoy mal desde la version cinco. y solo Innodb es
    transacional, pero como manejaria esto con PHP?.explico un poco mejor en que
    consiste todo..

    Tengo la siguiente duda, poseo 3 tablas que corresponden a:
    -------------------------------------------------------------
    1. TABLE ORDENES
    no_orden INT Primary Key
    fecha_ordeb DATETIME
    estado_orden VARCHAR
    ----------------------------------------------------------------
    2. TABLE DETALLES ORDENES
    id_ordenes INT Primary Key
    no_orden INT Foreign key
    Cod_producto INT FK
    ----------------------------------------------------------------
    3.TABLE PRODUCTOS
    Cod_producto INT PK
    name_product VARCHAR
    description_product TEXT
    Costo_producto DECIMAL
    Rank_producto INT

    -----------------------------------------------------------------------

    La lógica es la siguiente un usuario realiza una orden, con una serie de
    productos el usuario envía, el sistema genera una No de Orden el cual es un
    valor único por lo tanto es una PK en table Ordenes, luego almacena uno a
    uno los productos que envía en la tabla Detalles la cual cada producto
    estará relacionado con su numero de orden correspondiente, por lo tanto una
    orden puede tener muchos detalles que realmente son productos ya existentes,
    la Duda radica en la generación de ese numero de orden, de que manera podría
    generarlo, si dejo un autoincremente en INT estaria bien, pero necesito
    tener ese identificativo único al momento de crear para luego poder realizar
    el insert de productos de esa orden, pero para ello al momento de realizar
    la primera ejecución que es el insert ordenes debo conocer es ID sino no
    podre insertas en detalles, esto evitando colisiones o que un usuario tome
    un numero de orden que no corresponde.

    Espero alguien pueda entenderme y orientarme, estoy un poco
    confundido..espero no sea la cafeína.

    2009/12/18 Mauricio Cuenca <macuenca@gmail.com> <macuenca@gmail.com>

    Recomiendo que hagas una transacción, así se garantiza la atomicidad de la
    operación.

    Ten en cuenta que las transacciones
    solo son soportadas en ciertas versiones de MySQL y usando el motor InnoDB.

    --
    Mauricio


    On Dec 18, 2009, at 8:12, hahmael <hahmael@gmail.com> wrote:

    La funcion mysql_insert_id.. en una base de datos a la que van a acceder


    multiples clientes sea confiable esta función de PHP..?.

    con que otras funciones podemos trabajar, para devolver un valor
    autoincrement desconocido generado despues de un insert, para luego
    insertarlo en otra tabla, ?

    --
    Agradecido.

    Hahmael Tâher.




    --
    Denyl Meneses Guillén
    Dpto. Sistemas
    GRUPO DELTRON S.A
    Telf: 415 0101 anexo 1223

    Calle Raúl Rebagliati 170
    Urb. Santa Catalina - La Victoria

    -----------------------------------------------------------------
    “I know not with what weapons World War III will be fought, but World War IV will be fought with sticks and stones.”

    --
    Agradecido.

    Hahmael Tâher.

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupphp-general-es @
categoriesphp
postedDec 18, '09 at 7:12a
activeDec 22, '09 at 1:58p
posts9
users6
websitephp.net

People

Translate

site design / logo © 2022 Grokbase