Jump to content
Karbust

Função para obter e guardar nomes num array

Recommended Posts

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

Share this post


Link to post
Share on other 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>';

  • Vote 1

Share this post


Link to post
Share on other 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]

 

Share this post


Link to post
Share on other sites
HappyHippyHippo

se num_rows for zero, quantos ciclos serão efectuados ?


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

Share this post


Link to post
Share on other sites
HappyHippyHippo
49 minutes ago, washalbano said:

zero

e se não for ?


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

Share this post


Link to post
Share on other 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.

Edited by washalbano

Share this post


Link to post
Share on other 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 ?

  • Vote 1

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

Share this post


Link to post
Share on other 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);
}

Share this post


Link to post
Share on other 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...

Edited by Karbust

Share this post


Link to post
Share on other 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#

  • Vote 1

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.