使用PDO将数据插入数据库php



我写了代码,但仍然有这个错误(未捕获的PDOException:SQLSTATE[HY093]:无效的参数编号:绑定变量的数量与数据库中的令牌数量不匹配(。我有一些表用户,它们有username和user_id。我有一个表country,它有country_id作为主键(Varchar(,有country_name,表education有user_id作为外键,也有countryId作为外键。

<?php
include_once "connection.php";
/** @var PDO $conn */


if(isset($_REQUEST['btn_register'])) {

$user_id = $_REQUEST['user_id'];
$edname = $_REQUEST['edname'];
$street = $_REQUEST['street_address'];
$postcode = $_REQUEST['postal_address'];
$city = $_REQUEST['city'];
$pofiletext = $_REQUEST['profiletext'];
$positionn = $_REQUEST['position_com'];
$video = $_REQUEST['video'];
$logo = $_REQUEST['logo'];
$contactperson = $_REQUEST['contactpersoon'];
$emailcon = $_REQUEST['email_contactpersoon'];
$website = $_REQUEST['website'];

$country="SELECT country_id FROM country WHERE country_id= 'AD'";
try {
$select_stmt = $conn->prepare("INSERT INTO education (user_id ,edname, street_address, postal_address, city, country_id , profiletext ,position_com, video, logo,contactpersoon, email_contactpersoon , website )
VALUES (':user_id',':edname',':street_address', ':postal_address',':city',':countryid', ':about',':position_com', ':video', ':logo', ':contactperson',':email_contactpersoon', ':website')");



$select_stmt->bindParam(':user_id', $user_id);
$select_stmt->bindParam(':edname', $_POST['edname']);
$select_stmt->bindParam(':street_address', $_POST['street_address']);
$select_stmt->bindParam(':postal_address', $_POST['postal_address']);
$select_stmt->bindParam(' :city', $_POST['city']);
$select_stmt->bindParam(':country_id',$country );
$select_stmt->bindParam(':profiletext', $_POST['profiletext']);
$select_stmt->bindParam(':position_com', $_POST['position_com']);
$select_stmt->bindParam(':video', $_POST['video']);
$select_stmt->bindParam(':logo', $_POST['logo']);
$select_stmt->bindParam(':contactpersoon', $_POST['contactpersoon']);
$select_stmt->bindParam(':email_contactpersoon', $_POST['email_contactpersoon']);
$select_stmt->bindParam(':website', $_POST['website']);
$select_stmt->execute();
$resiterMsg = "Register successfully";

header("location: index.php");


} catch (PDOExeption $e) {
echo $e->getMessage();

}
}
?>

And my html code:

<?php
include_once "html.html";
include  "connection.php";
/** @var PDO $conn */
$sql = $conn->prepare('SELECT * From intern where user_id = :user_id');
$sql->bindParam(":user_id", $_GET['user_id']);
$sql->execute();
$row = $sql->fetch();
?>
<!DOCTYPE html>
<link href="//maxcdn.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css">
<script src="//maxcdn.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<!------ Include the above in your HEAD tag ---------->

<html>
<head>
<link href="//maxcdn.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css">
<script src="//maxcdn.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<link href="educationRegister.php">
<!------ Include the above in your HEAD tag ---------->
</head>
<body id="educationForm">
<div class="container">
<div class="login-form">
<div class="main-div">
<div class="panel">
<h2>Register</h2>

</div>
<form  method="post" class="cd-form floating-labels" action="educationRegister.php">

<div class="form-group">
<input type="hidden" name="type" value="education">
<input type="hidden" name="user_id" value="<?php echo $_GET['user_id'] ?>" >
<input type="text" name="edname" class="form-control"  placeholder="Name">
</div>

<div class="form-group">
<input type="text" name="street_address" class="form-control" placeholder="Street">
</div>
<div class="form-group">
<input type="text" name="postal_address" class="form-control"  placeholder="Postal Code">
</div>
<div class="form-group">
<select name="city">
<option>--Select city--</option>
<?php
$country_stmt=$conn->prepare('SELECT * FROM country');
$country_stmt->execute();
while ($row = $country_stmt->fetch(PDO::FETCH_ASSOC)) { ?>
<option value="<?php echo $row['country_id']; ?>"><?php echo $row['countryname']; ?></option>
<?php } ?>
</select>
</div>

<div class="form-group">
<input type="text" name="profiletext" class="form-control"  placeholder="About you">
</div>
<div class="form-group">
<input type="text" name="position_com" class="form-control"  placeholder="position">
</div>
<div class="form-group">
<input type="text" name="video" class="form-control" placeholder="video">
</div>
<div class="form-group">
<input type="text" name="logo" class="form-control" placeholder="logo">
</div>
<div class="form-group">
<input type="text" name="contactpersoon" class="form-control"  placeholder="contactperson">
</div>
<div class="form-group">
<input type="email" name="email_contactpersoon" class="form-control"  placeholder="emailContactperson">
</div>
<div class="form-group">
<input type="text" name="website" class="form-control"  placeholder="website">
</div>



<div class="form-group">
<div class="col-sm-offset-3 col-sm-9 m-t-15">
<button type="submit" name="btn_register" class="btn btn-primary" value="Regsiter" >
<button type="button" class="btn btn-primary"> <a href="index.php">Cancel</a> </button>
</div>
</div>


</form>
</div>

</div>
</div>


</body>
</html>
$select_stmt->bindParam(' :city', $_POST['city']);

':之间有一个空格。试试这样:

$select_stmt->bindParam(':city', $_POST['city']);

最新更新