Evair Gretter 0 Denunciar post Postado Outubro 27, 2016 Boa Tarde. Estou tentando passar uma variável como parâmentro para um select no meu banco de dados, mas me deparei com o seguinte problema. Meu select está assim dentro da função: function BuscarCursos($url){ @$endereco=$url; @$explode =(explode("&&", $endereco)); @$nome = $explode[1]; echo $nome; $pdo=conectarBanco(); try{ $buscar= $pdo->query(('SELECT * FROM cursos WHERE busc_curso="'.$nome.'"')); $buscar->execute(); if($buscar->rowCount()>0){ return $buscar->fetchAll(PDO::FETCH_OBJ); } } catch(PDOException $e){ echo "Erro ".$e->getMessage(); } Recebo o seguinte erro quando tento armazenar seu resultado a um array. Fatal error: Uncaught exception 'InvalidArgumentException' with message 'Passed variable is not an array or object, using empty array instead' in C:\wamp64\www\educartreinamentos\paginas\cursos.php on line 23 InvalidArgumentException: Passed variable is not an array or object, using empty array instead in C:\wamp64\www\educartreinamentos\paginas\cursos.php on line 23 Mas fazendo o select sem a variável usando apenas o parâmetro no caso o nome do curso funciona perfeitamente... :/ Agradeço a ajuda. Compartilhar este post Link para o post Compartilhar em outros sites
LaerteDias 17 Denunciar post Postado Outubro 27, 2016 Cara, por que você tá abrindo e fechando o parenteses duas vezes, aspas dupla duas vezes? Por que usar o @(arroba) ,isso impede que apareça mensagem de erro? <?php // acrescenta isso apos o $buscar->execute(); printf("Error: %s.\n", $buscar->error); ?> Compartilhar este post Link para o post Compartilhar em outros sites
Evair Gretter 0 Denunciar post Postado Outubro 27, 2016 Cara o dos ( foi erro mesmo. Mas o das aspas eu já tinha usado assim outras vezes e não tive problemas, qual seria a forma correta? Qual correção você sugere? Passei a variável da seguinte forma $nome="mc", desse jeito funcionou corretamente :/. E o @ é por que eu estou rodando direto dentro da página de cursos ou seja nesse caso as variávei ficam vazias e mostrando erro, mas quando o site estiver pronto o usuário só vai chegar na página de cursos clicando em um deles. Vou remover esses @ quando upa o site. Compartilhar este post Link para o post Compartilhar em outros sites
LaerteDias 17 Denunciar post Postado Outubro 27, 2016 já que você tá usando PDO tenta usar Prepared Statement, até para evitar SQL injection, segue link abaixo: http://codigofonte.uol.com.br/artigos/evite-sql-injection-usando-prepared-statements-no-php Compartilhar este post Link para o post Compartilhar em outros sites
Evair Gretter 0 Denunciar post Postado Outubro 27, 2016 Infelizmente continuo recebendo o mesmo erro :/ Compartilhar este post Link para o post Compartilhar em outros sites
LaerteDias 17 Denunciar post Postado Outubro 27, 2016 posta sua última modificação para eu poder te ajudar? Compartilhar este post Link para o post Compartilhar em outros sites
Evair Gretter 0 Denunciar post Postado Outubro 27, 2016 Cara obrigado pela ajuda. Já fiz isso em outras páginas e não tive problema, mas agora está me quebrando.... function BuscarCursos($url){ @$endereco=$url; @$explode =(explode("&&", $endereco)); $pdo=conectarBanco(); $query=("SELECT * FROM cursos WHERE busc_curso=?"); $stmt=$pdo->prepare($query); @$nome=$explode[1]; $stmt->bindvalue(1,$nome); $buscar=$stmt->execute(); $results=$stmt->fetchAll(PDO::FETCH_ASSOC); Compartilhar este post Link para o post Compartilhar em outros sites
LaerteDias 17 Denunciar post Postado Outubro 27, 2016 cara acrescenta esse codigo abaixo do execute() printf("Error: %s.\n", $buscar->error); Compartilhar este post Link para o post Compartilhar em outros sites
Evair Gretter 0 Denunciar post Postado Outubro 27, 2016 Notice: Trying to get property of non-object in C:\wamp64\www\educartreinamentos\funcoes\carregar.php on line 231 Error: . Compartilhar este post Link para o post Compartilhar em outros sites
LaerteDias 17 Denunciar post Postado Outubro 27, 2016 qual é o código desta linha que está dando erro? Compartilhar este post Link para o post Compartilhar em outros sites
Evair Gretter 0 Denunciar post Postado Outubro 27, 2016 printf("Error: %s.\n", $buscar->error); Mas o que eu acho mais estranho é que passando a variável assim: $nome="mc"; Funciona. E recebendo ela da outra página não funciona, sendo que se eu der um echo ele vai me mostrar mc. Compartilhar este post Link para o post Compartilhar em outros sites
LaerteDias 17 Denunciar post Postado Outubro 27, 2016 <?php //ao inves de $buscar = $stmt->execute(); //faça isso $stmt->execute(); ?> Substitua o codigo Compartilhar este post Link para o post Compartilhar em outros sites
LaerteDias 17 Denunciar post Postado Outubro 27, 2016 printf("Error: %s.\n", $buscar->error); Mas o que eu acho mais estranho é que passando a variável assim: $nome="mc"; Funciona. E recebendo ela da outra página não funciona, sendo que se eu der um echo ele vai me mostrar mc. Cara como você tá referenciando essa variavel de um exemplo da $url dá um echo na $url ve o que chega Compartilhar este post Link para o post Compartilhar em outros sites
Evair Gretter 0 Denunciar post Postado Outubro 27, 2016 o erro continua. recebo a $url desta forma dando um echo: /educartreinamentos/?pg=cursos&&it e faço o explode para guardar isso "it" na variável... Compartilhar este post Link para o post Compartilhar em outros sites
LaerteDias 17 Denunciar post Postado Outubro 27, 2016 cara explode não fica entre parentheses o certo é: $explode =explode("&&", $url); // pega $url direto Compartilhar este post Link para o post Compartilhar em outros sites
Evair Gretter 0 Denunciar post Postado Outubro 27, 2016 Já mudei isso também e ainda estou na mesma <_< Compartilhar este post Link para o post Compartilhar em outros sites
Mateus Silva 64 Denunciar post Postado Outubro 28, 2016 Jovem, você está usando PDO, utilize prepared statements Se o conteúdo da $nome é sempre a última coisa que vem depois de &&, utilize end() como no exemplo a baixo <?php function BuscarCursos($url){ $explode = explode("&&", $url); $nome = end($explode); try{ $pdo = conectarBanco(); $buscar = $pdo->prepare("SELECT * FROM cursos WHERE busc_curso = :nome"); $buscar->bindValue(':nome', $nome, PDO::PARAM_STR); if($buscar->execute()){ return $buscar->fetchAll(\PDO::FETCH_OBJ); } throw new \Exception("Erro na consulta", 1); } catch(\PDOException $e){ echo $e->getMessage(); } Compartilhar este post Link para o post Compartilhar em outros sites
Evair Gretter 0 Denunciar post Postado Outubro 28, 2016 Vou tentar fazer isso Mateus. Obrigado pela dica! Já estou usando prepared statements, seguindo as dicas do Laertes. Mas o que está me quebrando é que quando dou um echo na variável que foi explodida o resultado dela é exatamente o esperado (ex. ingles). Troquei o Return do código por "echo Um texto", e o texto é exibido corretamente, mas quando tento colocar esses dados no array e mostra-los recebo uma mensagem de erro informando que os dados vindos da função não são um array :/.... Para "escrever" estou fazendo assim: $dados=BuscarCursos(); $d = new ArrayIterator; while ($d->valid()){ echo $d->current->nome_curso; $d-> next(); } Passando um texto dentro do select (ex. "SELECT * FROM cursos WHERE nome_curso='ingles'"); Não tenho nenhum problema na listagem dos dados exceto um Missed Argument na função.... Obrigado pela ajuda. Compartilhar este post Link para o post Compartilhar em outros sites
Mateus Silva 64 Denunciar post Postado Outubro 28, 2016 Qual a relaçao da $dados e $d ? Aparentemente o erro está aí. Tente rodar o seguinte código: $dados = BuscarCursos(); echo '<pre>'; // print_r($dados); // só para debugar o que vem de BuscarCursos(); echo '</pre>'; foreach($dados AS $dado) echo $dados['nome_curso']; } Outra situação, em BuscarCursos(), não é passado um URL como parâmetro ? Compartilhar este post Link para o post Compartilhar em outros sites
Evair Gretter 0 Denunciar post Postado Outubro 28, 2016 Tentei fazer as alterações que você me sugeriu mas ainda não consegui resolver :/ Olha só Undefined index: id_curso in C:\wamp64\www\educartreinamentos\paginas\cursos.php on line 28 Mas se eu der um print_r($dados) ele me mostra o que eu preciso. Array ( [0] => stdClass Object ( [id_curso] => 1 [busc_curso] => it [nome_curso] => Informática e Tecnologia [resu_curso] => Resumo [desc_curso] => Descrição [grad_curso] => Grade [tipo_curso] => Presencial [imag_curso] => imagens/cursos/robotica.jpg ) ) Código da Função Mas ele só funciona caso eu passe o valor para a variável $nome, como fiz no código abaixo. E informa que o offset nome_curso é indefinido $pdo = conectarBanco(); try { $buscar = $pdo->prepare('SELECT * FROM cursos WHERE busc_curso=:busc_curso'); $buscar->bindValue(":busc_curso", $nome="it", PDO::PARAM_STR); $buscar->execute(); if($buscar->execute()){ return $buscar->fetchAll(PDO::FETCH_OBJ); } throw new Exception("Erro na consulta", 1); } catch(PDOException $e){ echo $e->getMessage(); }} caso eu faça assim: (Dei um echo para ver se o valor estava chegando na variável, chegou normalmente). function BuscarCursos($nome){ echo $nome; $pdo = conectarBanco(); try { $buscar = $pdo->prepare('SELECT * FROM cursos WHERE busc_curso=:busc_curso'); $buscar->bindValue(":busc_curso", $nome, PDO::PARAM_STR); $buscar->execute(); if($buscar->execute()){ return $buscar->fetchAll(PDO::FETCH_OBJ); } throw new Exception("Erro na consulta", 1); } catch(PDOException $e){ echo $e->getMessage(); }} ele simplesmente não mostra nada no print_r e ainda informa que tenho variáveis $nome não definidas. Saída da função <?php $dados = BuscarCursos(); echo '<pre>'; // print_r($dados); // só para debugar o que vem de BuscarCursos(); echo '</pre>'; foreach($dados AS $dado){ print_r($dados); echo $dados['id_curso']; } Compartilhar este post Link para o post Compartilhar em outros sites