Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

NoobProg

Migração para MySQLi

Recommended Posts

Olá, galera!! Preciso de uma ajuda MONSTRUOSA!!!!

 

Estou terminando um sistema IMENSO, com mais de 400 páginas, todas com conexão ao banco...O problema é: eu fazia a conexão usando o seguinte código:

 

function conectar()
{

$hostdb = 'localhost'; //host em que se dará a transação, pode ser o nome ou o
//endereço ip
$db = 'nome_do_banco'; //nome do banco de dados
$userdb = 'root'; //usuário que terá o acesso
$passdb = ''; //senha do usuário


if ($con = mysql_pconnect($hostdb,$userdb,$passdb))
{
return $con; //se a conexão for bem sucedida, será retornado a variável $con
}
else
{
return 0; //se a conexão não ocorrer, será retornado 0
}
}

function mysqlexecuta($id,$sql,$erro = 1) {
if(empty($sql) OR !($id))
return 0; //Erro na conexão ou no comando SQL
if (!($res = @mysql_query($sql,$id))) {
if($erro)
echo "
<script>
    alert('<b>Erro!!</b><BR>Falha no acesso ao banco de dados! <BR><BR><font class=mpreto>Clique OK para retornar e corrigir os valores informados ou <BR> caso mesmo assim não consiga, entre em contato com o suporte<BR>suporte@site.com.br ou (xx)xxxx-xxxx</font><BR><a href=../downloads/vcard.vcf class=gpreto><img src=../img/whatsapp.png border=0 title=Adicionar contato whatsapp></a>', function (data) {
            alert()
    }, {return: true});
</script>
";
exit;
}
return $res;
}

$con = conectar();

mysql_select_db("nome_do banco");

 

Daí, quando eu ia fazer qualquer tipo de acesso ao banco, eu fazia assim:

 

$sqlst1="SELECT * FROM tabela";
$resst1 = mysqlexecuta($con,$sqlst1);
while ($rowst1 = mysql_fetch_array($resst1)) {
$valor1=$rowst1['valor1'];
$valor2=$rowst1['valor2'];
echo"$valor1 / $valor2...";
}

mas os servidores está dando como código desatualizado, e pelo que eu pesquisei, tenho que usar mysqli...

Até aí, tudo bem, fiz as alterações, diminuiu 90% da quantidade de erros que dava....

 

mas a minha função MYSQLEXECUTA não está rodando mais... e ela é a CHAVE de todas as consultas...

 

a pergunta é: como eu posso criar uma função mysqlexecuta() para rodar com a consulta mysqli, e assim eu não ter que alterar todas as 400 páginas?????

 

PS: tenho menos de uma semana para entregar o projeto para a segunda avaliação (desta vez, online!)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você leu o manual sobre a mysqli? Quanto você tentou alterar, como você fez?

Compartilhar este post


Link para o post
Compartilhar em outros sites
23 minutos atrás, ESerra disse:

Você leu o manual sobre a mysqli? Quanto você tentou alterar, como você fez?

sim, eu li! achei o máximo, encurtou os códigos pra caramba!!!! nos meus próximos sites e sistemas, já vou começar usando esta nova grafia!!!!

 

o problema é migrar 400 páginas em 7 dias.....

 

 

eu finalizei com o código deste jeito: 

function conectar()
{

$hostdb = 'servidor'; //host em que se dará a transação, pode ser o nome ou o
//endereço ip
$db = 'banco'; //nome do banco de dados
$userdb = 'usuario'; //usuário que terá o acesso
$passdb = 'senha'; //senha do usuário
$database='banco';


$mysqli = new mysqli("$hostdb", "$userdb", "$passdb", "$database");
if ($mysqli->connect_errno) {
    echo "Falha ao conectar ao MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}

}

function mysqlexecuta($id,$sql,$erro = 1) {
if(empty($sql) OR !($id))
return 0; //Erro na conexão ou no comando SQL
if (!($res = @mysql_query($sql,$id))) {
if($erro)
echo "
<script>
    alert('<b>Erro!!</b><BR>Falha no acesso ao banco de dados! <BR><BR><font class=mpreto>Clique OK para retornar e corrigir os valores informados ou <BR> caso mesmo assim não consiga, entre em contato com o suporteo!<BR>suporte@site.com.br ou (xx)xxxxx-xxxx</font><BR><a href=../downloads/vcard.vcf class=gpreto><img src=../img/whatsapp.png border=0 title=Adicionar contato whatsapp></a>', function (data) {
            alert()
    }, {return: true});
</script>
";
exit;
}
return $res;
}

$con = conectar();

mysqli_select_db("banco");


}


/*
na mesma página da conexão eu já faço várias consultas
para pegar alguns dados que uso em praticamente todas as páginas, tipo: contagem de clientes online, etc
*/

$sqlst1="SELECT * FROM tabela";
$resst1 = mysqlexecuta($con,$sqlst1);
while ($rowst1 = mysql_fetch_array($resst1)) {
$valor1=$rowst1['valor1'];
$valor2=$rowst1['valor2'];

 

 

e como retorno estou tendo o seguinte código: 

 

Warning: mysqli_select_db() expects exactly 2 parameters, 1 given in /home/usuario/public_html/inc/conectar.php on line 91

 

 

conteúdo da linha 91:

 

mysqli_select_db("banco");

já tentei fazer:

 

mysqli_select_db("$on", "banco");

 

 

fora os outros erros :

 

Warning: mysql_fetch_array() expects parameter 1 to be resource, integer given in /home/usuario/public_html/inc/conectar.php on line 100
Warning: mysql_num_rows() expects parameter 1 to be resource, integer given in /home/usuario/public_html/inc/conectar.php on line 149
Warning: mysql_fetch_array() expects parameter 1 to be resource, integer given in /home/usuario/public_html/inc/conectar.php on line 179
Warning: mysql_num_rows() expects parameter 1 to be resource, integer given in /home/usuario/public_html/inc/conectar.php on line 190
Warning: Division by zero in /home/usuario/public_html/inc/conectar.php on line 213
Warning: mysql_num_rows() expects parameter 1 to be resource, integer given in /home/usuario/public_html/inc/conectar.php on line 220
Warning: mysql_fetch_array() expects parameter 1 to be resource, integer given in /home/usuario/public_html/index.php on line 10 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você disse que tentou:

mysqli_select_db("$on", "banco");

 

"$on" é o link da conexão? Vou assumir que "banco" é o nome do banco. Se sim, isso deve ter retornado um erro também.

 

Quanto aos outros erros, você terá que alterar todas as funções mysql_* para as respectivas mysqli_*, não tem muito milagre, o máximo é usar algum editor para alterar em lote os arquivos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

perdão, foi erro de digitação... a variável de conexão é "$con"!!!

 

sim, banco é o nome do banco!!!

 

recomenda algum editor em lote?? não me lembro de nenhum!!!!

 

OBS; temporariamente, para testes de envio de emails, eu hospedei o sistema em um server gratuito que suporta PHP5.4 , só estou esperando o DNS propagar para testar as funções principais e os emails.... daí vou editar as mysql_

 

e migrar meu easyphp para 7.0

Compartilhar este post


Link para o post
Compartilhar em outros sites

os erros que retornaram foram iguais aos erros que eu citei anteriormente, foi como se eu nem tivesse alterado o código!

 

Warning: mysql_fetch_array() expects parameter 1 to be resource, integer given in /home/usuario/public_html/inc/conectar.php on line 100
Warning: mysql_num_rows() expects parameter 1 to be resource, integer given in /home/usuario/public_html/inc/conectar.php on line 149
Warning: mysql_fetch_array() expects parameter 1 to be resource, integer given in /home/usuario/public_html/inc/conectar.php on line 179
Warning: mysql_num_rows() expects parameter 1 to be resource, integer given in /home/usuario/public_html/inc/conectar.php on line 190
Warning: Division by zero in /home/usuario/public_html/inc/conectar.php on line 213
Warning: mysql_num_rows() expects parameter 1 to be resource, integer given in /home/usuario/public_html/inc/conectar.php on line 220
Warning: mysql_fetch_array() expects parameter 1 to be resource, integer given in /home/usuario/public_html/index.php on line 10 

 

Editado 2 horas por NoobProg 
faltou parte dos erros...
 0

Compartilhar este post


Link para o post
Compartilhar em outros sites
2 horas atrás, Mateus Silva disse:

pra alterar em lote tem o grepWin, mas todas as suas chamadas para o banco não são na mysqlexecuta() ? se for é só alterar lá

 

então.... mas essa é a questão....

 

como eu conseguiria MANTER  a função mysqlexecuta() em todas as 400 páginas, mas apenas modificá-la no "conexão.php" para que ela continue funcionando????

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tchê, vamos começar do básico:

 

No google:

 

CRUD PHP mysqli

 

Pronto, primeiro você tem que entender como a coisa funciona e só ai você conseguirá replicar isso no seu sistema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Fala galera, tudo bem?
       
      Tenho o seguinte codigo:
       
       class Data {
      public static function ExibirTempoDecorrido($date)
      {
          if(empty($date))
          {
              return "Informe a data";
          }
          $periodos = array("segundo", "minuto", "hora", "dia", "semana", "mês", "ano", "década");
          $duracao = array("60","60","24","7","4.35","12","10");
          $agora = time();
          $unix_data = strtotime($date);
          // check validity of date
          if(empty($unix_data))
          {  
              return "Bad date";
          }
          // is it future date or past date
          if($agora > $unix_data) 
          {  
              $diferenca     = $agora - $unix_data;
              $tempo         = "atrás";
          } 
          else 
          {
              $diferenca     = $unix_data - $agora;
              $tempo         = "agora";
          }
          for($j = 0; $diferenca >= $duracao[$j] && $j < count($duracao)-1; $j++) 
          {
              $diferenca /= $duracao[$j];
          }
          $diferenca = round($diferenca);
          if($diferenca != 1) 
          {
              $periodos[$j].= "s";
          }
          return "$diferenca $periodos[$j] {$tempo}";
      }
      }
       
      Funciona redondinho se o valor retornado for de algumas horas, mas...
      Quando passa de dois meses, ele retorna a palavra mess. Deve ser por conta dessa linha
      if($diferenca != 1) 
          {
              $periodos[$j].= "s";
          }
       
      Quero que modre:
       
      2 meses atrás
      e não
      2 mess atrás.
       
      Espero que tenham entendido.
       
      Valeu
    • Por Carlos Web Soluções Web
      Olá...
      Estou tentando fazer o seguinte !!
      Listando dados em tabela !!
      Gostaria que....se na listagem houver 4 linhas...indepedente de seu número de ID, faça a listagem em ID ser em ordem 1 2 3 4 !!
      Exemplo...se tiver uma listagem de dados que está em ID 1 3 3...faça ficar 1 2 3 !!

       
      echo "<table class='tabela_dados' border='1'> <tr> <td>ID</td> <td>Nome Empresa</td> <td>Responsável</td> <td>Telefone 1</td> <td>Telefone 2</td> <td>E-mail 1</td> <td>E-mail 2</td> <td>Endereço</td> <td>CEP</td> <td>Bairro</td> <td>AÇÃO 1</td> <td>AÇÃO 2</td> </tr> "; $sql = "SELECT ID FROM usuarios_dados WHERE Usuario='$usuario'"; $result = $conn->query($sql); $num_rows = $result->num_rows; $Novo_ID = 1; for ($i = 0; $i < $num_rows; $i++) { $registro = $result -> fetch_row(); $sql2 = "UPDATE usuarios_dados SET ID='$Novo_ID' WHERE ID='$Novo_ID'"; $result2 = $conn->query($sql2); $Novo_ID++; } $sql = "SELECT * FROM usuarios_dados"; $result = $conn->query($sql); if ($result->num_rows > 0) { // output data of each row while($row = $result->fetch_assoc()) { echo "<tr> <td>$row[ID]</td> <td>$row[Nome_Empresa]</td> <td>$row[Responsavel]</td> <td>$row[Telefone_1]</td> <td>$row[Telefone_2]</td> <td>$row[Email_1]</td> <td>$row[Email_2]</td> <td>$row[Endereço]</td> <td>$row[CEP]</td> <td>$row[Bairro]</td> <td> <form method='post' action='Editar_Dados.php'> <input type='hidden' name='usuario' value='$usuario'> <input type='hidden' name='senha' value='$senha'> <input type='hidden' name='ID' value='$row[ID]'> <input type='submit' style='padding: 10px;' value='EDITAR'> </form> </td> <td> <form method='post' action='Deletar_Dados.php'> <input type='hidden' name='usuario' value='$usuario'> <input type='hidden' name='senha' value='$senha'> <input type='hidden' name='ID' value='$row[ID]'> <input type='submit' style='padding: 10px;' value='DELETAR'> </form> </td> </tr> "; } } else { echo "0 results"; } $conn->close();  
    • Por ILR master
      Boa tarde pessoal, tudo bem ?
       
      Eu uso o tinymce para cadastro de textos no meu siite, porém, quero fazer um sistema para que os colunistas possam fazer o próprio post.
      O problema do tinymce, é que ele mantém a formatação do texto copiado, como tamanho de fonts, negritos, etc... Quero que o usuário cole o texto e a própria textarea limpe a formatação para que ele formate como quiser.
       
      A pergunta é:
       
      O tinymce tem uma opção para desabilitar a formatação quando um texto é colocado?
      Tem alguma função via java ou php para retirar a formatação assim que o texto é colado?
      Ou é melhor usar um outro editor?
       
      Agradeço deste já.
    • Por Giovanird
      Olá a todos!
      Tenho uma pagina que possui uma DIV onde coloquei uma pagina PHP.
      Uso a função setInterval para atualizar a pagina inclusa dentro da DIV.
      O problema é que ao acessar o site , a DIV só me mostra a pagina inclusa somente quando completo o primeiro minuto.
      Preciso que a pagina inclusa já inicie carregada
       
      Meu código JavaScript e a DIV com a pagina PHP
       
      <script> function atualiza(){ var url = 'direita.php'; $.get(url, function(dataReturn) { $('#direita').html(dataReturn); }); } setInterval("atualiza()",60000); </script> <div> <span id="direita"></span> </div>  
    • Por ILR master
      Fala pessoal.
       
      Seguinte:
       
      Quero selecionar duas tabelas e mostrar com resultados intercalados. Abaixo segue um código explicando para vcs terem uma ideia.
       
      $consulta = "SELECT A.*, B.* FROM tabela1 A, tabela2 B'";
      $resultado = mysqli_query($conexao, $consulta) or die ("erro");
      while($busca = mysqli_fetch_array($resultado)){
       
      print $busca['cod_evento']; --> traz o código da tabela1 
      print $busca['titulo_evento']; -->  traz o titulo da tabela1
      print $busca['cod_noticia']; --> traz o código da tabela2
      print $busca['titulo_noticia']; --> traz o tituloda tabela2
       
      }
       
      Espero que entendam. Grato
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.