Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá, sou iniciante em php, estou tentando migrar um código de php 5.6 para pdo mais da erro, não roda....
Alguém pode me ajudar?
include '../Connections/functions.php';
function montaSelect()
{
$sql = "SELECT * FROM membros";
$result = $con->query($sql);
if ($result->num_rows > 0 )
{
while($dados = $result->fetch_assoc())
{
$opt .= '<option value="'.$dados['id'].'">'.$dados['nome'].'</option>';
} $opt = '<option value="0">Nenhum Membro cadastrado</option>';
return $opt;
}
}
Este era o código original:
// require 'topof.php';
// echo $usuario;
/**
* função que retorna o select
*/
function montaSelect()
{
$sql = "SELECT id, nome FROM membros '";
$query = mysql_query( $sql );
if( mysql_num_rows( $query ) > 0 )
{
while( $dados = mysql_fetch_assoc( $query ) )
{
$opt .= '<option value="'.$dados['id'].'">'.$dados['nome'].'</option>';
}
}
else
$opt = '<option value="0">Nenhum Membro cadastrado</option>';
return $opt;
}Top, funcionou perfeitamente, Muito obrigado, tentei aplicar a mesma regra para segunda parte do código mais esta dando erro...
Código anterior
function retorna( $igreja_nome=null, $id=null )
{
$id = (int)$id;
$sql = "SELECT * FROM membros ";
if( $id != null && $igreja_nome != null)
$sql .= "WHERE `id` = {$id} and `igreja` = '{$igreja_nome}';";
$query = mysql_query( $sql );
$json = '[';
if( mysql_num_rows( $query ) > 0 )
{
$dados = mysql_fetch_assoc( $query );
$json .= '{"celular":';
$json .= '"';
$json .= $dados["celular"];
$json .= '"}';
}
else
$json .= '{"celular": "não encontrado"}';
$json .= ']';
return $json;
}
switch($_SERVER['REQUEST_METHOD']){
case 'GET': $the_request = $_GET;
echo retorna();
case 'POST': $the_request = $_POST;
echo retorna($the_request['igreja'], $the_request['id']);
}
Alterei para este
$retorna = function () use ($conexao)
{
$id = (int)$id;
$sql = "SELECT * FROM membros ";
if( $id != null)
$sql .= "WHERE `id` = {$id};";
$result = $conexao->query($sql);
$json = '[';
if ( !$qtd )
{
$dados = $result->fetch(PDO::FETCH_ASSOC);
$json .= '{"celular":';
$json .= '"';
$json .= $dados["celular"];
$json .= '"}';
}
else
$json .= '{"celular": "não encontrado"}';
$json .= ']';
return $json;
}
/ só se for enviado o parâmetro, que devolve o combo /
switch ($_SERVER["REQUEST_METHOD"]){
case 'GET': $the_request = $_GET;
echo $retorna();
case 'POST': $the_request = $_POST;
echo $retorna($the_request['igreja'], $the_request['id']);
}
Usei a mesma lógica mais esta dando erro.Então @Marcones Borges, o primeiro ponto é que você esqueceu dos parâmetros da função nessa nova versão:
$retorna = function ( $igreja_nome=null, $id=null ) use ( $conexao )
O segundo ponto é que nesse exemplo você teria a possibilidade de fazer um loop OU retornar um único registro se informar o $id na função, e por conta dessa flexibilidade o uso do conceito de $qtd fica um pouco mais complicado.
Diante do modelo de função que você postou, eu iria sugerir usar o fetchAll no lugar, como expliquei no meu post anterior. O fetchAll não lida bem quando você precisa recuperar MUITOS registros (pois ele armazena todos em memória ao invés de utilizar ponteiros para nevegar de um para o outro como nos outros casos), mas de todos os métodos ele é o mais prático.
E por fim, não há necessidade de você formatar a string para JSON na mão, pois o PHP faz isso para você.
Não pretendia fazer a função completa novamente, pois acredito que isso atrapalha o processo de aprendizado, mas são poucas linhas de código, então vamos lá:
$retorna = function ( $igreja_nome = NULL, $id = NULL ) use ( $conexao ) {
$id = (int)$id;
// Como é só o celular que você precisa, limitamos a consulta
// Para exibir o "Não encontrado", fiz um pequeno IF no select
// Esse IF poderia ser feito via PHP, mas aqui parece ser mais fácil
$sql = 'SELECT IF( `celular`, `celular`, "Nao encontrado" ) `celular` FROM membros';
// Não precisa do != null. $id é um inteiro e quando aplicado em um IF, 0=false, resto=true
if ( $id )
$sql .= " WHERE `id` = {$id};";
$result = $conexao->query($sql);
return json_encode( $result->fetchAll( PDO::FETCH_ASSOC ) );
}; // Não esqueça: Ao contrário de uma function normal,
// nessa aqui você PRECISA colocar o ponto-e-vírgula
// Isso pq essa está associada a uma variável,
// e no final de todas as vars vem o ponto-e-vírgula.
Outro detalhe é que $igreja_nome não está sendo utilizada na função.
Alguns ajustes ainda podem ser feitos, mas a base da função seria essa aí.
Deu certo, muito obrigado pela ajuda!!
Muito obg, ajudou d+++
Show de bola, fico feliz que tenha dado certo. =D
Olá @Marcones Borges.
>
7 horas atrás, Marcones Borges disse:
while($dados = $result->fetch_assoc())
Essa linha você precisa trocar para:
// dentro do loop:
// Agora chamamos:
// Agora chamamos: