deh_silva 0 Denunciar post Postado Janeiro 19, 2017 Como ficaria esse código quando se está trabalhando com PDO? $identificacao = gerar_numero_random(10); while (mysql_num_rows(mysql_query("SELECT COUNT(*) FROM pessoa WHERE identificacao = '" . $identificacao . "'")) > 0) : $identificacao = gerar_numero_random(10); endwhile; $query = mysql_query("INSERT INTO pessoa (identificacao, nome) VALUES ('" . $identificacao . "', '" . $nome . "')"); A idéia é que a variavel identificação tenha um valor que não exista no banco de dados ainda. Se existir, deve ser gerado um novo valor antes da inserção.Agradeço se puderem me ajudar. Compartilhar este post Link para o post Compartilhar em outros sites
EdCesar 124 Denunciar post Postado Janeiro 19, 2017 $identificacao = gerar_numero_random(10); while (mysql_num_rows(mysql_query("SELECT COUNT(*) FROM pessoa WHERE identificacao = '" . $identificacao . "'")) > 0) : /** * Após você ter todo esse trabalho para verificar se a identificação não existe no banco, * você gera outra identificação? * Nesta forma que você esta fazendo, o correto seria já dar o insert aqui, * e não fazer $identificacao = gerar_numero_random(10) novamente */ $identificacao = gerar_numero_random(10); endwhile; $query = mysql_query("INSERT INTO pessoa (identificacao, nome) VALUES ('" . $identificacao . "', '" . $nome . "')"); Pergunta: Você não pode simplesmente deixar a coluna identificação como auto incremento no banco? http://php.net/manual/pt_BR/pdo.connections.php Compartilhar este post Link para o post Compartilhar em outros sites
deh_silva 0 Denunciar post Postado Janeiro 19, 2017 Não posso. A coluna identificação tem que ser um número aleatorio de no mínimo 10 digitos. Compartilhar este post Link para o post Compartilhar em outros sites
Alaerte Gabriel 662 Denunciar post Postado Janeiro 19, 2017 Basta estudar um pouco que você saberá converter. MySQL PDO Compartilhar este post Link para o post Compartilhar em outros sites
ShadowDLL 2 Denunciar post Postado Janeiro 19, 2017 Mais ou menos isso... <?php $identificacao = gerar_numero_random(10); $show = $pdo->prepare(" SELECT COUNT(*) FROM pessoa WHERE identificacao = :identificacao "); $show->execute(array( ':identificacao' => $identificacao )); $row_Count = $show->rowCount(); while ($row_Count > 0) { $identificacao = gerar_numero_random(10); }else{ // Faz algo se for menor que 0 } $show2 = $pdo->prepare(" INSERT INTO pessoa (identificacao, nome) VALUES (:identificacao, :nome) "); $show2->execute(array( ':identificacao' => $identificacao, ':nome' => $nome )); ?> Compartilhar este post Link para o post Compartilhar em outros sites
deh_silva 0 Denunciar post Postado Janeiro 19, 2017 Eu tentei fazer desse jeito, mas ainda não certo. $identificacao = gerar_numero_random(10); $sql = $con->query("SELECT identificacao FROM pessoa WHERE identificacao = '" . $identificacao . "'"); do { $identificacao = gerar_numero_random(10); } while (count($sql->fetchAll(PDO::FETCH_ASSOC)) > 0); $query = $con->query("INSERT INTO pessoa (identificacao, nome) VALUES ('" . $identificacao . "', '" . $nome . "')"); Sugestões? Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Janeiro 19, 2017 fetchAll apenas retorna os registros já executados. Para o caso de PDO, são necessárias ao menos de duas a três linhas:- bindValue()/bindParam() (pode ser enviado diretamente o execute);- execute();- fetch()/fetchAll().No seu caso, uma função recursiva faria mais sentido: function myRand($length = 10) { /** lógica para gerar o número utilize a mesma que já possui **/ $statement = $pdo->prepare("SELECT identificacao FROM pessoa WHERE identificacao = :identificacao"); $statement->bindParam(':identificacao' , $identificacao); $statement->execute(); return $statement->rowCount() > 0 ? myRand($length) : $identificacao; } No seu caso, pode montar a lógica diretamente na função gerar_numero_random. PS.: esse código está longe de ser/estar otimizado. Compartilhar este post Link para o post Compartilhar em outros sites
EdCesar 124 Denunciar post Postado Janeiro 19, 2017 deh_silva, não tinha entendido muito bem o seu codigo, pode testar esse aqui que vai fazer o que você quer: $dbh = new PDO('mysql:host=127.0.0.1;dbname=SeuBanco', 'SeuUsuario', 'SuaSenha'); $identificacao = gerar_numero_random(10); while ( $dbh->query("SELECT identificacao FROM pessoa WHERE identificacao = $identificacao ")->rowCount() > 0) { $identificacao = gerar_numero_random(10); } $insert = "INSERT INTO pessoa (identificacao, nome) values (:identificacao, :nome)"; $stmt = $dbh->prepare($insert); $stmt->bindParam(':identificacao', $identificacao); $stmt->bindParam(':nome', $nome); $stmt->execute(); Compartilhar este post Link para o post Compartilhar em outros sites
gabrieldarezzo 255 Denunciar post Postado Janeiro 19, 2017 Para Randon, utiliza algo assim então haha: bin2hex(openssl_random_pseudo_bytes(16)); //generate a random token é interessante tmb adicionar o indice 'UNIQUE' na sua tabela, assim garante performasse nas consulta utilizando esta chave primaria E fazer um select antes do Insert garantindo que não está ferindo o índice de unicidade (unique) Compartilhar este post Link para o post Compartilhar em outros sites