gpt4 book ai didi

php - 警告:PDOStatement::execute(): SQLSTATE[HY093]: 参数编号无效:参数未在第 24 行的 C:\wamp\www\PDO.php 中定义

转载 作者:太空宇宙 更新时间:2023-11-03 11:59:58 25 4
gpt4 key购买 nike

今天,我在尝试我的代码时遇到了这个错误:参数未定义...请帮助我:

    <?php
$user = 'dbuser';
$pass = 'pwd';
$db = new PDO( 'mysql:host=localhost;
dbname=registration', $user, $pass );
$form = $_POST;
$firstname = $form[ 'firstname' ];
$lastname = $form[ 'lastname' ];
$username = $form[ 'username' ];
$email = $form[ 'email' ];
$password = $form[ 'password1' ];
$dateofbirth = $form[ 'dateofbirth' ];
$monthofbirth = $form[ 'monthofbirth' ];
$yearofbirth = $form[ 'yearofbirth' ];
$gender = $form[ 'gender' ];
$sql = "INSERT INTO members ( firstname, lastname, username, email,
password, dateofbirth, monthofbirth, yearofbirth, gender )
VALUES ( :firstname, :lastname, :username,
:email, :password1, :dateofbirth, :monthofbirth, :yearofbirth,
:gender )";
$query = $db->prepare( $sql );
$query->execute( array( ':firstname'=>$firstname, ':lastname'=> $lastname,
':username'=>$username, ':email'=>$email, ':password'=>$password,
':dateofbirth'=>$dateofbirth, ':monthofbirth'=>$monthofbirth,
':yearofbirth'=>$yearofbirth, ':gender'=>$gender ) );
$result = $query->execute( array( ':firstname'=>$firstname, ':lastname'=>$lastname,
':username'=>$username, ':email'=>$email, ':password'=>$password,
':dateofbirth'=>$dateofbirth, ':monthofbirth'=>$monthofbirth,
':yearofbirth'=>$yearofbirth, ':gender'=>$gender ) );
if ( $result ){
echo "<p>Thank you. You have been registered</p>";
} else {
echo "<p>Sorry, there has been a problem inserting your details. Please contact admin.</p>";

}?>

最佳答案

在您传递给 PDO::prepare 的查询字符串中,您有这个参数:

:email, :password1

但是您传递给 PDOStatement::execute 的数组没有 :password1 键,它有一个 :password键代替。这是一个简单的打字错误:请改正其中一个错误。

不过,在将实际提交的数据存储到数据库之前对其进行清理可能是个好主意。像电子邮件地址这样的东西可以很容易地使用像这样的东西来验证:

if (!filter_var($email, FILTER_VALIDATE_EMAIL))
{
printf(
'%s is not a valid email address, please fill in correct values',
$email
);
//rebuild form, and return response to client
}
else
{
//carry on validating data, eventually insert it in the DB
}

同样重要的是不要忘记使用 isset 检查 post 参数,如果你不这样做,你的代码会产生很多通知

关于php - 警告:PDOStatement::execute(): SQLSTATE[HY093]: 参数编号无效:参数未在第 24 行的 C:\wamp\www\PDO.php 中定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29927168/

25 4 0
文章推荐: php - 为什么这个 PHP 代码不正确?
文章推荐: c# - 从 Razor 页面发送 List 到 Update 的行?