Foros del Web » Programando para Internet » PHP »

Posibilidad de que colapse el script? (muchas ordenes mysql en for)

Estas en el tema de Posibilidad de que colapse el script? (muchas ordenes mysql en for) en el foro de PHP en Foros del Web. Hola! Bueno, estoy haciendo un script que ya funciona tal como quiero, no sé si este hecho de la mejor manera (seguramente no) por eso ...
  #1 (permalink)  
Antiguo 12/12/2008, 22:17
Avatar de Threepwood  
Fecha de Ingreso: febrero-2002
Ubicación: Argentina
Mensajes: 906
Antigüedad: 18 años
Puntos: 4
Posibilidad de que colapse el script? (muchas ordenes mysql en for)

Hola!

Bueno, estoy haciendo un script que ya funciona tal como quiero, no sé si este hecho de la mejor manera (seguramente no) por eso agradecería sus comentarios respecto a la posibilidad de que MySql colapse (si la hay) y formas de hacer lo mismo de una manera más ligera.

Les cuento, lo que hace el script es añadir datos a una tabla pero bajo las siguientes condiciones:

El input envia los datos de esta manera: nombre1, nombre2, nombre3, nombre[n] y yo los inserto en la BD cada uno en una fila distinta. Si el nombre ya existe no lo inserta, si no, lo hace.

Me arreglé de esta manera, creo, bastante arcaica, pero por ahora funciona. Aquí solo se muestran dos inputs, pero realmente en el formulario "de verdad" van a ser 10 o 12 que necesitarán ser revisados.

Como dije, sería genial escuchar sus opiniones al respecto, y si tiene sugerencias sobre cómo mejorar. (Y de nuevo, si MySql puede colapsar).

En fin, sin más, aqui el script:

Código PHP:


<html>
<head>
<title>Pruebas</title>
</head>
<body>

    <?

    
if (!$_POST['submit'])

    {

    
?>

<form action="<? echo $PHP_SELF?>" method="post"  name="forma" id="formulario" accept-charset="utf-8">

<label for="autor">autor</label>
<input type="text" name="autor" value="" /><br />

<label for="otros">Otros</label>
<textarea name="otros"></textarea>
<br />

<input type="Submit" name="submit" id="submitbutton" value="Enviar" />

</form>

<?php

    
}

    else

        {

    include(
"config.php");

    
$autor $_POST['autor'];
    
$otros $_POST['otros'];

    
//divide por comas

    
$nombres_autor explode(", ",$autor);
    
$nombres_otros explode(", ",$otros);

    
//Cuento los elementos del array devuelto por explode

    
$contar_autor count($nombres_autor);
    
$contar_otros count($nombres_otros);

    
//Hago el bucle para insertar los datos

     
for ($i 0$i $contar_autor$i++) {

    
mysql_query("SET NAMES utf8");
    
$seleccionar "SELECT nombre FROM autores WHERE nombre = '$nombres_autor[$i]'";
    
$query_select mysql_db_query($db$seleccionar$link) or die("Error en $query <br>MySQL dice: ".mysql_error());

        if (
mysql_num_rows($query_select) == ) {

    
mysql_query("SET NAMES utf8");
     
$query "INSERT INTO autores (nombre)  VALUES ('$nombres_autor[$i]')";
    
mysql_db_query($db$query$link) or die("Error en $query <br>MySQL dice: ".mysql_error());

        }


        else {

        echo 
"El nombre $nombres_autor[$i] ya esta en la base de datos";
        echo 
"<br />";
        }

     }


     for (
$i 0$i $contar_otros$i++) {

    
mysql_query("SET NAMES utf8");
    
$seleccionar "SELECT nombre FROM autores WHERE nombre = '$nombres_otros[$i]'";
    
$query_select mysql_db_query($db$seleccionar$link) or die("Error en $query <br>MySQL dice: ".mysql_error());

        if (
mysql_num_rows($query_select) == ) {

     
mysql_query("SET NAMES utf8");
     
$query "INSERT INTO autores (nombre)  VALUES ('$nombres_otros[$i]')";
    
mysql_db_query($db$query$link) or die("Error en $query <br>MySQL dice: ".mysql_error());

        }

        else {

        echo 
"El nombre $nombres_otros[$i] ya esta en la base de datos";
        echo 
"<br />";

        }
    }



    echo 
"Se insertaron los datos";

}



?>

</body>
</html>
Gracias, y saludos

Samuel.
__________________
Equívocos sin importancia
  #2 (permalink)  
Antiguo 12/12/2008, 22:52
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 13 años, 9 meses
Puntos: 2135
Respuesta: Posibilidad de que colapse el script? (muchas ordenes mysql en for)

Hola Threepwood,

La posibilidad de que colapse depende mucho del Hardware bajo el que se ejecute MySQL, aunque te adelanto que yo en un PIV dual, he tenido scripts que llegan a hacer mas de 1,000 consultas y no colapsa el servidor.

Yo creo que la forma que lo haces es correcta, solamente mueve el SET NAMES UTF8 al inicio del script, no necesitas enviarlo cada que haces una consulta.

Por otro lado es más optimo mysql_query, que mysql_db_query.

Saludos
  #3 (permalink)  
Antiguo 13/12/2008, 09:56
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Posibilidad de que colapse el script? (muchas ordenes mysql en for)

10 consultas no son mucho. Pero si de todas maneras te preocupa, entonces lee este mensaje y ve si puedes adaptar tu código. No sé si exista alguna diferencia práctica "real".

  #4 (permalink)  
Antiguo 13/12/2008, 12:14
Avatar de Threepwood  
Fecha de Ingreso: febrero-2002
Ubicación: Argentina
Mensajes: 906
Antigüedad: 18 años
Puntos: 4
Respuesta: Posibilidad de que colapse el script? (muchas ordenes mysql en for)

Muchas gracias a ambos.

Seguiré con el código, cada vez salen más "Y si esto, y si el otro".

Ojalá al final todo salga bien.


Samuel.
__________________
Equívocos sin importancia
  #5 (permalink)  
Antiguo 13/12/2008, 12:34
 
Fecha de Ingreso: junio-2004
Mensajes: 266
Antigüedad: 15 años, 8 meses
Puntos: 8
Respuesta: Posibilidad de que colapse el script? (muchas ordenes mysql en for)

Podrias hacer una unica consulta para ver que autores existen en lugar de una por autor:

SELECT nombre FROM autores WHERE nombre IN ("autor1", "autor2",...)

Evidentemente ("autor1", "autor2",...) lo construyes con PHP, eso te devuelve que autores ya existen, luego en el bucle de insercion testeas que el autor no esté en el resultado de esa query.
__________________
WebSenior
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:35.