Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Karbust

Função para obter e guardar nomes num array

Mensagens Recomendadas

Karbust

Boas

Estou aqui a desenvolver um site para a PAP, mas estou com dificuldades numa função...

O objetivo da função é obter e guardar o id e o nome (desse id) num array e dar return.

Tenho esta função:

function get_categories()
{
	global $connection;

	$result[] = array();

    $cmd = "SELECT * FROM hardware_types";
    $query = mysqli_query($connection, $cmd);

    if($query)
    {
        for($y = 1; $query->num_rows; $y++)
		{
			$result[$y] = mysqli_fetch_row($query)->type_name;
		}

		return $result;
    }
}

Mas está sempre a arrebentar:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 40 bytes)

Estrutura da tabela:

id_type	type_name
1		CPU
2		GPU
3		PSU
4		Mobo
5		RAM
6		HDD
7		SSD
8		Caixa
9		Cooler
10		Monitor
11		Router
12		Headset
13		Rato
14		Teclado
15		Tapete
16		Repetidor
17		Router
18		Switch
19		Cabo
21		Nenhum

Alguém me pode dar uma ajuda?

Obrigado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
washalbano

Olá!

O que é PAP?
Conecte-se assim:

<?php
// variáveis para conexão em localhost
    $host = 'localhost';   // define o host do banco de dados
    $user = 'root';            // user do banco de dados
    $password = '';         // senha do banco de dados
    $database = 'scriptbrasil';  // nome do banco de dados

// estabelecer conexão com o mysql
$sqli = new mysqli($host, $user, $password);
// verificar se houve erro na conexão
if ($sqli->connect_error) {
    // se houve erro, mostra erro na tela
    echo "<p>Erro ao Conectar: $sqli->connect_error</p>";
}
// alterar o tipo de codificação da conexão com o banco de dados,  para utf8
if (!$sqli->set_charset('utf8')) {
    echo "<p class='error'>O charset não é utf8: $sqli->error</p>";
}
// selecionar/abrir o banco de dados para trabalhar
if (!$sqli->select_db($database)) {
    // se o banco de dados não for encontrado
    echo "<p class='error'>Banco de dados não encontrado, chefe!</p>";
}

Proceda com  a busca assim:
 

<?php
// monte sua query de busca, selecionando apenas as informações necessárias:
$query = "SELECT id_type, type_name FROM hardware_types";

// execute a query
$result = $sqli->query($query);

// verifique se houve algum erro na execução da query
if ($sqli->error) {
  // se houve, mostre o erro na tela
	echo '<p class="error">Falha ao executar query, chefe!</p>' . $sqli->error;
	// se não houve erro algum e algum resultado foi encontrado
} elseif ($result->num_rows) {
	// busca os dados em formato de array associativo
	$dados = $result->fetch_all(MYSQLI_ASSOC);
} else { // se nenhum resultado foi encontrado
	echo '<p class="warning">Nenhum tipo de hardware cadastrado, chefe!</p>';
}

Debugar a variável $dados:
echo '<pre>';
var_dump($dados);
echo '<pre>';

  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Karbust

PAP é o Projeto de Aptidão Profissional, é um trabalho que temos de apresentar para terminar um curso profissional aqui em Portugal...

E obrigado, funcionou!

Depois para aceder foi usar algo deste género: 

get_categories()[$i][type_name]

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
washalbano

Creio que não entendi. O que são "ciclos efetuados"?

se num_rows = 0
não há resultados

se num_rows for maior que zero,
serão retornados quantos registros existirem.

Editado por washalbano

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo
7 hours ago, washalbano said:

Creio que não entendi. O que são "ciclos efetuados"?

 

14 hours ago, Karbust said:

 


        for($y = 1; $query->num_rows; $y++)
		{
			$result[$y] = mysqli_fetch_row($query)->type_name;
		}

novamente, já vimos que se não haver registos, não serão executados ciclos, mas se houver ? quantos ciclos são efectuados ?

  • Voto 1

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
washalbano

o método fetchAll, busca todos os registros encontrados, sem a necessidade de usar estruturas de repetição, veja:
http://php.net/manual/pt_BR/mysqli-result.fetch-all.php

Por isso, se num_rows retornar true, é maior que zero, indicando que há resultados, logo:

// se algum resultado foi encontrado
if ($result->num_rows) {
    // busca os dados(TODOS ENCONTRADOS) em formato de array associativo
    $dados = $result->fetch_al l(MYSQLI_ASSOC);
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Karbust
5 horas atrás, HappyHippyHippo disse:

 

novamente, já vimos que se não haver registos, não serão executados ciclos, mas se houver ? quantos ciclos são efectuados ?

Eu tinha me esquecido de meter $y = $query->num_rows no segundo parâmetro, por isso é que estava a estoirar...

Eu agora ando mais do C# e já me esqueci de algumas coisas em PHP...

Editado por Karbust

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo
4 hours ago, Karbust said:

Eu tinha me esquecido de meter $y = $query->num_rows no segundo parâmetro, por isso é que estava a estoirar...

Eu agora ando mais do C# e já me esqueci de algumas coisas em PHP...

Isso é problemático... 

Primeiro a condição de paragem continua errada

Segundo, isto é igual seja no php ou c#

  • Voto 1

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação 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

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.