• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

watt

PHP + SQL: Servidor/código provoca lentidão

24 mensagens neste tópico

Alguem me pode dar uma judinha?

estou a fazer o seguinte site http://www.pixelprog.com/KPC/ e acontece que desde de que as opões do menu cresceram o site ficou muito lento.

o codigo que tenho no menu o seguinte.

			<ul id="navmenu">
	          <?php do { ?>
              <div align="left"></div>
                  <li>
                   <a href="cat.php?val=<?php echo $row_Recordset1['menu1']; ?>"><?php echo $row_Recordset1['menu1']; ?></a> 
							<ul>
							<?php $selecionado = $row_Recordset1['menu1'];
		mysql_select_db($database_bd, $bd);
		$query_Recordset2 = "SELECT * FROM menus WHERE nivel = '2' and menu1='$selecionado'";
		$Recordset2 = mysql_query($query_Recordset2, $bd) or die(mysql_error());
		$row_Recordset2 = mysql_fetch_assoc($Recordset2);
		$totalRows_Recordset2 = mysql_num_rows($Recordset2);
							 ?>
							 <?php do { ?>
							<?php if ( $row_Recordset2['menu2'] <> '')
							  {; ?> 
				<li>
				<a href="cat.php?val=<?php echo $row_Recordset2['menu2']; ?>"><?php echo $row_Recordset2['menu2']; ?></a>

							<ul>
						<?php $selecionado2 = $row_Recordset2['menu2'];
		mysql_select_db($database_bd, $bd);
		$query_Recordset3 = "SELECT * FROM menus WHERE nivel = '3' and menu2='$selecionado2'";
		$Recordset3 = mysql_query($query_Recordset3, $bd) or die(mysql_error());
		$row_Recordset3 = mysql_fetch_assoc($Recordset3);
		$totalRows_Recordset3 = mysql_num_rows($Recordset3);

							 ?>

							 <?php do {?>
							  <?php if ( $row_Recordset3['menu3'] <> '')
							  {; ?> 
					<li>
					<a href="cat.php?val=<?php echo $row_Recordset3['menu3']; ?>"> <?php echo $row_Recordset3['menu3']; ?></a>
					</li>
					<?php }; ?>
					</li>
							<?php } while ($row_Recordset3 = mysql_fetch_assoc($Recordset3)); ?> 
            				</ul>
								<?php }; ?>	
							<?php } while ($row_Recordset2 = mysql_fetch_assoc($Recordset2)); ?> 
           				  </ul>
				</div>
                  </li>
	          <?php } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)); ?>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Acho que o servidor é que é lento, não acho que este código possa fazer o site ficar lento. Mas depende... Cada caso é um caso

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Acho que o servidor é que é lento, não acho que este código possa fazer o site ficar lento. Mas depende... Cada caso é um caso

estranho, acho que deve de haver outra razão. o q poderá ser alem de um server lento ?!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estive a ver o código de fonte da página e reparei que é muito grande... isso é que deve estar a fazer a pagina ficar lenta porque a pagina está muito pesada.

E as imagens devem estar a fazer a página ficar lenta também.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estive a ver o código de fonte da página e reparei que é muito grande... isso é que deve estar a fazer a pagina ficar lenta porque a pagina está muito pesada.

E as imagens devem estar a fazer a página ficar lenta também.

achas ?! é que só comecei a ter este problema qd o meu cresceu, porque antes qd tinha metade do menu, ele era rapido.tipo em 1 segundo no maximo tinha a pagina aberta.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

bem...

epa... devias organizar o código um pouco... está um confusão dos diabos.

abres e fechas tags de seguida umas quantas vezes...

devias tambem mudar de linha de vem em qdo. Acho que no teu caso mais vale usar uma estrutura do tipo:

if ( condiçao ) { código }

tens isso com DO IF... tens k andar a fazer gincanas p abrir e fechar tags php...

anyway... para alem disso n vejo o que podes estar a fazer o sql lento... tens a base de dados no mesmo servidor que o webserver?

é que tas a  usar os dois parametros do mysql_query qdo só precisas de um...

faz a ligação a base de dados no inicio e depois usa somente a função desta forma

mysql_query($query);

é que de outra forma tens que te estar sempre a autenticar o servidor cada vez que fazes um pedido... penso que pode ser isto que te esteja a criar lentidão, pois esse código não tem queries nenhuns que precisem de atenção especial

Experimenta e diz lá se correu bem

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Acho que ele tem que  organizar o código html e não deve juntar o código php com o código html.

E utilizar classes e functions para fazer a conecção com a base de dados para não ter que estar sempre a conectar a msyql, e só conectar quando for preciso fazer um query.

Não aconselho a utilizar if e elses isso só faz aumentar o código php e a desorganizar por vezes.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

será que me podem exemplificar um pouco do codigo usando "E utilizar classes e functions para fazer a conecção com a base de dados para não ter que estar sempre a conectar a msyql, e só conectar quando for preciso fazer um query."

é que ainda estou a começar isto do php, e no inicio tentei fazer umas function, mas correu mal. e agora ao mexer nas querey isto começa-me a atrofiar td.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ARG!!! Ora cá está um excelente exemplo da porcaria que as linguagens como o PHP e o ASP permitem fazer: uma enorme salganhada de código onde se mistura tudo, desde apresentação até lógica de negócio!

Se o problema aparecer quando os menus cresceram vê a construção do teu HTML e vê a performance da tua bd.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

será que me podem exemplificar um pouco do codigo usando "E utilizar classes e functions para fazer a conecção com a base de dados para não ter que estar sempre a conectar a msyql, e só conectar quando for preciso fazer um query."

é que ainda estou a começar isto do php, e no inicio tentei fazer umas function, mas correu mal. e agora ao mexer nas querey isto começa-me a atrofiar td.

Eu criei esse código a  dois dias atrás para um script que estou a fazer!! Fica aqui para utilizares:

class kinSql
{
        function kinSql( $kinHost, $kinUser, $kinSenha, $kinBD, $Permanente = TRUE ) {
        if($Permanente)
        {
               $this->Conectar = mysql_pconnect( $kinHost, $kinUser, $kinSenha );
              } else {
                $this->Conectar = mysql_connect( $kinHost, $kinUser, $kinSenha );
                }
                if($this->Conectar) {
                     if($kinBD != "")
                     {
                           $this->kinBD = $kinBD;
                           $SelBD = @mysql_select_db( $this->kinBD );
                            if(!$SelBD)
                            {
                                    @mysql_close( $this->Conectar ) ;
                                    $this->Conectar = $SelBD;
                            }
                          return $this->Conectar;
                        }
                 }
                }
}

$bd = new kinSql( $kinHost, $kinUser, $kinSenha, $kinBD, true );

isso conecta e seleciona o banco de dados... só precisas de fazer um include em todas paginas e não precisas conectar outra vez... só precisas de executar os querys.

Tens que ter a variaveis  $kinHost com o host da mysql  $kinUser com o user da mysql $kinSenha com a senha da mysql $kinBD com o nome do banco de dados.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

experimenta ligar-te primeiro, podes usar por exemplo  class do kingless, e depois faz os queries usando apenas como parametro de entrada a string do query.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

bem ... unca usei classes, nem includes só tinha lido... vou tentar fazer alguma coisa

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

No principio da pagina onde tens que executar um query colocas include("ficheiro.php");  (ficheiro.php é o nome do ficheiro onde vai ficar  a class).

É so fazer o include.. e depois podes executar o query normalmente tipo mysql_query("SELECT...");  mysql_fetch_array("...");

Sem ser preciso utilizar mysql_connect nem mysql_select_db

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

experimenta ligar-te primeiro, podes usar por exemplo  class do kingless, e depois faz os queries usando apenas como parametro de entrada a string do query.

Eu já tinha dito isso ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

estou mesmo á nóra...

pus a class no file ligar.php, no index.php pus <?php include('ligar.php') ?>

depois como uso a função ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

raius partam as classs e funçoes, nao consigo ligar isto de forma nenhuma

já agora, existe alguma especie de dreamweaver pa linux ??

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

só precisas de fazer o include e mais nada, depois é só executar o query normalmente... mysql_query()... mysql_fetch_array()...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pa... esquece as classes... deixas as classes para depois...

usa código deste tipo:

no inicio de cada ficheiro poe isto ( está o mais simples possivel )

muda as variáveis como é obvio

$host="localhost";
$user="gervasio";
$pass="gervasiospass";
$dbname="gervasiosbd";

mysql_connect($host,$user,$pass,);
mysql_select_db($dbname);

depois cada vez que fazes um query faz uma coisa do tipo

$sql="select * from tbls where 1";
mysql_query($sql);

o que há aqui a reter é o facto de passares APENAS UM PARAMETRO NA FUNCAO MYSQL_QUERY pois a ligação já está feita... acho que o que te está a atrasar pode ser o facto de, com o código que tinhas teres que estar sempre a a abrir uma ligação para cada query.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

e depois isto assim n deveria  escrever o resultado ?

    <?php

$sql="select * from produtos where id='4'";

mysql_query($sql);

echo $recordset33['artigo'];

?>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

e depois isto assim n deveria  escrever o resultado ?

    <?php

$sql="select * from produtos where id='4'";

mysql_query($sql);

echo $recordset33['artigo'];

?>

não.

tens k usar uma função do tipo mysql_fetch_* para extraíres os valores do resulset

Lê o manual

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

mysqli_fetch é uma evolução de mysql_fetch... mas é tudo a mesma coisa

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

watt, deixa-me só que te dê uma dica, não sei se já o fizeste, mas mesmo assim não custa nada dizer:

Não precisas de te ligar e de definir a BD onde vais fazer os queries, cada vez que queres fazer um query.

No início do código fazes a ligação, e já não precisas de fazer mais nada, a partir daí, e tal como já disseram, podes fazer os queries à vontade sem teres que te ligar repetidamente. Depois no fim, fechas a ligação.

A não ser que te estejas a ligar a BD's diferentes, o que para o mesmo site, não tem muita lógica.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora