Santos54 Posted February 18, 2022 at 12:55 PM Report #625429 Posted February 18, 2022 at 12:55 PM Boas tardes estou a desenvolver um projeto final e aparece me o seguinte erro Citação Fatal error: Uncaught Error: Call to a member function bind_param() on bool in D:\xampp\htdocs\site\validarrregisto.php:41 Stack trace: #0 {main} thrown in D:\xampp\htdocs\site\validarrregisto.php on line 41 Ja tentei de tudo mas nao sei como resolver alguem me poderia ajudar? Aqui está o codigo: <?php $uname1 = $_POST['Nome_Utilizador']; $paswrd = $_POST['Password']; $email = $_POST['Email']; if (!empty($uname1) || !empty($email) || !empty($paswrd)) { $host = "localhost"; $dbusername = "root"; $dbpassword = ""; $dbname = "pap"; // Create connection $conn = new mysqli ($host, $dbusername, $dbpassword, $dbname); if (mysqli_connect_error()){ die('Connect Error ('. mysqli_connect_errno() .') ' . mysqli_connect_error()); } else{ $SELECT = "SELECT Nome_Utilizador From login Where Nome_Utilizador = ?"; $INSERT = "INSERT Into registoo (NmUtilizador , Password ,Email)values(0,?,?,?)"; //Prepare statement $stmt = $conn->prepare($SELECT); $stmt->bind_param("s", $email); $stmt->execute(); $stmt->bind_result($email); $stmt->store_result(); $rnum = $stmt->num_rows; //checking username if ($rnum==0) { $stmt->close(); $stmt = $conn->prepare($INSERT); $stmt->bind_param("sss", $uname1,$paswrd,$email); $stmt->execute(); echo "Registado com sucesso"; } else { echo "Alguem ja tem esse nome de utlizador , coloque outro"; } $stmt->close(); $conn->close(); } } else { echo "Todos os campos sao necessarios"; die(); } ?>
Rui Carlos Posted February 18, 2022 at 01:09 PM Report #625430 Posted February 18, 2022 at 01:09 PM Verifica o resultado de $stmt = $conn->prepare($INSERT). A query que tens parece-me estar errada, o que deve fazer que o prepare falhe, e devolva um booleano, o que causa o erro da linha seguinte. Rui Carlos Gonçalves
Santos54 Posted February 18, 2022 at 01:11 PM Author Report #625431 Posted February 18, 2022 at 01:11 PM E entao como corrijo? Ja tentei de tudo
Rui Carlos Posted February 18, 2022 at 01:18 PM Report #625432 Posted February 18, 2022 at 01:18 PM Tenta executar a query directamente no MySQL: INSERT Into registoo (NmUtilizador , Password ,Email)values(0,?,?,?). Suspeito que vai falhar, e deve-te dizer o erro que tens. Não trabalho com PHP, pelo que não sei exactamente a melhor forma de lidar com erros do MySQLi, mas algo como isto também pode ajudar: if (false === $stmt) { die('error on prepare(): ' . $mysqli->error); } Em geral, convém validar o resultado de todas as funções que podem falhar. Rui Carlos Gonçalves
washalbano Posted February 18, 2022 at 01:29 PM Report #625433 Posted February 18, 2022 at 01:29 PM Olá! 33 minutes ago, Santos54 said: $INSERT = "INSERT Into registoo (NmUtilizador , Password ,Email)values(0,?,?,?)"; Só remover aquele zero dali 1 Report
washalbano Posted February 18, 2022 at 01:32 PM Report #625434 Posted February 18, 2022 at 01:32 PM (edited) Para ver sempre esse tipo de erro use um die ali, assim: $stmt = $conn->prepare($INSERT) or die($conn->error); Escrevi um exemplo verificável e testável: https://we.tl/t-WVOlFepAlo Edited February 18, 2022 at 01:36 PM by washalbano
Ivo Vicente Posted February 19, 2022 at 06:46 PM Report #625437 Posted February 19, 2022 at 06:46 PM Em 18/02/2022 às 13:29, washalbano disse: Olá! Só remover aquele zero dali @washalbano Está correto, aquele zero está a mais, pois faz com que sejam passados 4 valores quando o query apenas tem mapeadas 3 colunas Na documentação oficial diz o seguinte: Citação The number of variables and length of string types must match the parameters in the statement. Feito é melhor que perfeito
Santos54 Posted February 20, 2022 at 05:42 PM Author Report #625439 Posted February 20, 2022 at 05:42 PM Obrigado gente de facto era esse 0 que estava lá a mais Voces sao os maiores Grande Abraço
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now