Karbust Posted May 26, 2018 at 06:54 PM Report #610708 Posted May 26, 2018 at 06:54 PM 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
washalbano Posted May 26, 2018 at 07:49 PM Report #610711 Posted May 26, 2018 at 07:49 PM 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>'; 1 Report
Karbust Posted May 26, 2018 at 11:08 PM Author Report #610714 Posted May 26, 2018 at 11:08 PM 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]
HappyHippyHippo Posted May 27, 2018 at 12:05 AM Report #610715 Posted May 27, 2018 at 12:05 AM se num_rows for zero, quantos ciclos serão efectuados ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
HappyHippyHippo Posted May 27, 2018 at 01:14 AM Report #610717 Posted May 27, 2018 at 01:14 AM 49 minutes ago, washalbano said: zero e se não for ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
washalbano Posted May 27, 2018 at 02:33 AM Report #610718 Posted May 27, 2018 at 02:33 AM (edited) 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 May 27, 2018 at 02:34 AM by washalbano
HappyHippyHippo Posted May 27, 2018 at 09:48 AM Report #610719 Posted May 27, 2018 at 09:48 AM 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 ? 1 Report IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
washalbano Posted May 27, 2018 at 02:17 PM Report #610721 Posted May 27, 2018 at 02:17 PM 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); }
Karbust Posted May 27, 2018 at 03:34 PM Author Report #610724 Posted May 27, 2018 at 03:34 PM (edited) 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 May 27, 2018 at 03:34 PM by Karbust
HappyHippyHippo Posted May 27, 2018 at 08:30 PM Report #610731 Posted May 27, 2018 at 08:30 PM 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# 1 Report IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now