mysqli_stmt_prepare () отправленные значения равны нулю - PullRequest
0 голосов
/ 01 марта 2019

Итак, у меня есть этот PHP-код:

mysqli_stmt_bind_param($stmt,"s",$username);
mysqli_stmt_execute($stmt);
mysqli_stmt_store_result($stmt);
$resultCheck = mysqli_stmt_num_rows($stmt);
if($resultCheck > 0)
{
   header("Location: ../signup.php?error=userTaken&u&mail=".$email);
   exit();
}
else
{
   $sql = "INSERT INTO users (uidUsers, emailUsers, pwdUsers) VALUES (?,?,?)";
   $stmt = mysqli_stmt_init($conn);
   if(!mysqli_stmt_prepare($stmt,$sql))
   {
       header("Location: ../signup.php?error=sqlerror");
       exit();
   }
   else
   {
       $hashedPwd = password_hash($password, PASSWORD_DEFAULT);
       mysqli_stmt_bind_param($stmt,"sss",$username,$email,$hashedPwd);
       $bp = $stmt->execute();
       if ( false===$bp )
       {
           die('Error with execute: ' . htmlspecialchars($stmt->error));
       }
       header("Location: ../signup.php?signup=success");
       exit();
    }
}

, который выдает ошибку:

Error with execute: Column 'uidUsers' cannot be null.

подготовленный оператор не работает, независимо от того, что я пробовал.Однако, если я использую

$sql = "INSERT INTO users (uidUsers, emailUsers, pwdUsers) VALUES (' ',' ',' ')"
if ($conn->query($sql) === TRUE) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}  

и просто вставляю данные без их очистки, это работает.

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Так что моя версия PHP была старой и не поддерживала функцию, я установил ее на PHP 7.3, и теперь код работает.

0 голосов
/ 01 марта 2019

В операторе if(!mysqli_stmt_prepare($stmt,$sql)) вы выполняете запрос $sql без параметров привязки.то есть вы выполняете prepare 1st, а затем в других случаях используете bind

Используйте следующий код:

$hashedPwd = password_hash($password, PASSWORD_DEFAULT);
$sql = "INSERT INTO users (uidUsers, emailUsers, pwdUsers) VALUES (?,?,?)";
$stmt = mysqli_stmt_init($conn);
mysqli_stmt_prepare($stmt,$sql);
mysqli_stmt_bind_param($stmt,"sss",$username,$email,$hashedPwd);

if (mysqli_stmt_execute($stmt))
{
   mysqli_stmt_store_result($stmt);
   if(mysqli_stmt_num_rows($stmt)>0) //check num rows ie user is available or not
   {
      header("Location: ../signup.php?signup=success"); //user available
      exit();
   }
   else
   {
      header("Location: ../signup.php?error=sqlerror"); //user is not available
      exit();
   }

}
else
{
   die('Error with execute: ' . htmlspecialchars($stmt->error));  //Query execution error
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...