Ir para conteúdo

POWERED BY:

Arquivado

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

Br3n0k

insert_id em mysqli

Recommended Posts

Boa tarde galera, estou tentando aprender mysqli, e no mysqli eu utilizava o mysqli_insert_id(); logo depois da query e ele me voltava o id da ultima insert, porem no mysqli estou fazendo assim:

 

 

$insert_pendencia = $db->query($insert) or die (mysqli_error());

echo $insert_pendencia->insert_id;

 

e não é retornado nem um valor, já conferi a documentação e tambem não deu certo, na documentação está assim (orientado a objetos)

 

<?php
$mysqli
= new mysqli("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}


$mysqli->query("CREATE TABLE myCity LIKE City");

$query = "INSERT INTO myCity VALUES (NULL, 'Stuttgart', 'DEU', 'Stuttgart', 617000)";
$mysqli->query($query);

printf ("New Record has id %d.\n", $mysqli->insert_id);

/* drop table */
$mysqli->query("DROP TABLE myCity");

/* close connection */
$mysqli->close();
?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, Br3n0k.

 

Pode mostrar a classe? Adicionalmente, eu geralmente uso "PreparedStatements", onde ficaria da seguinte forma:

<?php
// ...
$db=genericConnectionFunction(); // Pega o resultado da conexão
$insert_pendencia = $db->prepare("select * from anytable"); // Prepara a query
if($insert_pendencia->execute()) // Executa e testa a query
    echo "ID de retorno: ".$insert_pendencia->insert_id;
else
    echo "Houve o seguinte erro: ".$insert_pendencia->error;
// ...

"PreparedStatements" é uma boa prática ótima.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ele está inserindo no banco?

 

Geralmente, faço assim:

function connect(){
	$obj = new mysqli( DATABASE_HOST, DATABASE_LOGIN, DATABASE_PASS, DATABASE_NAME );
	if( $obj->connect_error ){
		die( "Erro na conexão ao banco: (".$obj->connect_errno.") ".$obj->connect_error );
	}
	else{
		$obj->query( "SET NAMES \"utf8\"", MYSQLI_STORE_RESULT );
		$obj->query( "SET character_set_connection = utf8", MYSQLI_STORE_RESULT );
		$obj->query( "SET character_set_client = utf8", MYSQLI_STORE_RESULT );
		$obj->query( "SET character_set_results = utf8", MYSQLI_STORE_RESULT );
	}
	return $obj;
}

$query = "SUA QUERY AQUI ****";

$objConnect = connect();
if( $objResult = $objConnect->query( $query ) ){
	return $objConnect->insert_id;
}
else{
	return false;	
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Maykel, esta forma e basicamente a que estou usando e não está dando certo, Thiago, eu estou iniciando mesmo nesse caminho de mysqli mais pelo que percebi a sua forma é com PDO? não sei ao certo, pois não leio muito sobre o PHP talvez esteja falando coisa com coisa rs...

 

bem o que consegui fazer dar certo foi assim...:

 

 

$db = new mysqli($servidor_db,$usuario_db,$senha_db,$banco_db);

 

$db->set_charset("utf8");

if ($db->connect_errno) {
die ("<h1>Falha ao Conectar no Banco de Dados: (" . $db->connect_errno . ") " . $db->connect_error."</h1>");

}

 

$insert = "INSERT INTO pendencias_abertas (`id_pendencia`, `categoria`, `tipo`, `produtor`, `fazenda`, `autor`, `gestor`, `vendedor`, `data_criacao`, `prazo`, `status`, `pendencia`, `data_conta_prazo`, `responsavel`) VALUES (NULL, '".$categoria."', '".$tipo_nome."', '".$produtor."', '".$fazenda."', '".$_SESSION['UsuarioNome']."', '".$gestor."', '".$resultado_busca_produtor['vendedor']."', '".date('Y-m-d H:i:s')."', '".$prazo_nome."', 'aberta', '".$pendencia."', '".$data_conta_prazo."', '".$responsavel."')";

 

 

$insert_pendencia = $db->query($insert) or die (mysqli_error());

echo mysqli_insert_id($db);

 

$db->close();

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, Br3n0k.

 

Eles têm suas diferenças, onde as maiores são que o PDO é multiplataforma, mas tem menor desempenho, e o MySQLi só funciona no (adivinha...) MySQL, mas é mais rápido.

 

O que você fez é MySQLi, mas sem "PreparedStatement", o que seria bom que você fizesse pra depois você não quebrar tanto a cabeça se quiser dar "bind" nos valores, pra incrementar a segurança.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por mkboy
      Olá
       
      Tenho uma situação onde tenho a mesma tabela em dois bancos de dados diferentes, em locais diferentes.
      E quando atualizar uma tabela preciso atualizar a segunda no outro banco de dados também, é a mesma instrução SQL, os bancos / tabelas / registros são iguais.
       
      Tentei isso, mas não funciona:
       
      $endereco_banco = "186.000.00.01"; $usuario = "us01"; $senha = "010101"; $banco = "db01"; $conexao = new mysqli($endereco_banco,$usuario, $senha, $banco); $endereco_banco_externo = "186.000.00.02"; $usuario_externo = "us02"; $senha_externo = "020202"; $banco_externo = "db02"; $conexao_externo = new mysqli($endereco_banco_externo,$usuario_externo, $senha_externo, $banco_externo); //Atualiza no primeiro DB $conexao->query($str) or trigger_error($conexao->error." [$str]"); //Atualiza no segundo DB $conexao_externo->query($str) or trigger_error($conexao_externo->error." [$str]"); Podem me ajudar por favor.
    • Por Lísias de Castro
      Ola. Estou criando um sistema de carrinho em php e pra isso preciso de um banco de dados. Pra não ficar chamando todas as funções a cada vez que a pagina atualiza, decidi usar a função mysqli_select_db, que verifica se o db existe e caso não exista, entre nas funções e crie. Porém, ao chamar a função quando o db não existe o php lança um "erro não capturado" e trava o layout. Se eu chamo o código sem o mysqli_select_db o código roda, porem chamando as funções a cada atualização. Poderia ser algum erro na api, ou tem uma nova forma pra pegar o tipo mysqli no php8?
      Esse é o código que eu chamo pra salvar os dados:
       
      ```php
      public function save($host,$user,$pass,$db){
              $connection = mysqli_connect($host, $user, $pass);
              if($connection){
                  if(mysqli_select_db($connect,$db)){
                  }
                  $dbCreator = "CREATE DATABASE IF NOT EXISTS ".$db;
                  if(mysqli_query($connection, $dbCreator)){
                      //echo "Database created successfully"."</br>";
                  } else{
                      echo "ERROR: Could not able to execute $sql. " . mysqli_error($connection);
                      return 0;
                  }
                  $tableCreator = "CREATE TABLE IF NOT EXISTS `".$db."_tb` (".
                              "`name` VARCHAR(64) NOT NULL,".
                              "`price` REAL,".
                              "`amount` SMALLINT,".
                              "`barcode` BIGINT NOT NULL PRIMARY KEY,".
                              "`lot` VARCHAR(64) NOT NULL,".
                              "`manufactured` VARCHAR(10) NOT NULL,".
                              "`maturity` VARCHAR(10) NOT NULL".
                              ");";
                  $insert = "INSERT INTO ".$db."_tb (`name`, `price`, `amount`, `barcode`, `lot`, `manufactured`, `maturity`) ".
                                "SELECT ".
                                "\"$this->name\",".
                                "\"$this->price\",".
                                "\"$this->amount\",".
                                "\"$this->barcode\",".
                                "\"$this->lot\",".
                                "\"$this->manufactured\",".
                                "\"$this->maturity\"".
                                " FROM dual WHERE NOT EXISTS(SELECT * FROM $db"."_tb WHERE barcode = '$this->barcode')LIMIT 1;";
                  if(mysqli_select_db($connection,$db)){
                      if(mysqli_query($connection,$tableCreator));//echo "Tabela ".$db."_tb criada com sucesso.<br/>";
                      if(mysqli_query($connection,$insert));//echo "Dados inseridos com sucesso em $db"."_tb<br/>";
                  }
                  mysqli_close($connection);
                  return 1;
              }
              return 0;
          }
      ```


    • Por AdrianoAP
      Pessoal estou tendo este erro quando eu fui passa a minha aplicação do mysql para o mysqli vejam o código -->>
       
      <?php
        $emitente = $mysqli->query("SELECT nome FROM emitente ORDER BY id ASC LIMIT 1");
        while($ln = $emitente->fetch_array()){
        echo $ln['nome'];
      }?>
       
       
      Devido á isso meu sistema não consegue fazer o login, se alguém puder me dar alguma dica eu agradeço.
    • Por Felper
      Criei um sistema de login com php e mysql mas não consigo realizar o login mesmo tendo certeza de que os dados foram cadastrados com sucesso. Não sei o que fiz de errado. Vejam o código:
      <?php $login2 = $_POST['loginlogar']; $senha2 = $_POST['senhalogar']; $link = mysqli_connect("localhost", "root", "", "bancolanche") or die("<h1>Não foi possível conectar!!</h1>". mysqli_error()); $banco = mysqli_select_db($link, "bancolanche") or die("<h1>Não foi possível abrir banco de dados!!</h1>". mysqli_error()); $sql = "SELECT login, senha FROM users"; $resulta = mysqli_query($link, $sql); while ($book = $resulta->fetch_object()) { $logindb = $book->login; $senhadb = $book->senha; } if($login2 == "" || $senha2 == ""){ $_SESSION['msg'] = "<h1 style='color:red'>Erro ao logar! Há campos de preenchimento obrigatório em branco.</h1>"; header("Location: logar.php"); } else { if($logindb==$login2 && $senhadb==$senha2){ $_SESSION['msg'] = "<h1 style='color:green'>Logoff realizado com sucesso!</h1>"; header("Location: index.html"); } else { $_SESSION['msg'] = "<h1 style='color:red'>Erro ao logar! Usuário inexistente ou senha incorreta.</h1>"; header("Location: logar.php"); } } mysqli_close($link); ?>  
    • Por Marcos Vinícius
      Prezados,
       
      Estou tentando fazer uma consulta que soma os valores de um campo em determinado mês/ano mas não estou conseguindo fazer funcionar. Alguém tem uma ideia do que pode ser?
       
      "SELECT sum(caepf) AS scaepf FROM atend WHERE date_format(data, '%Y-%m') <= date_format('$d', '%Y-%m') AND date_format(data, '%Y-%m') >= date_format('$d', '%Y-%m') AND pav = '$nome_pav' AND dr = '$dr' ";  
×

Informação importante

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