Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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();
?>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;
}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();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.
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.