2016-11-20 93 views
0
<?php 
$user=htmlspecialchars($_POST['user']); 
$password=htmlspecialchars($_POST['password']); 
$email=htmlspecialchars($_POST['email']); 
//$number=htmlspecialchars($_POST['number']); 
$quater=htmlspecialchars($_POST['quater']); 
if (isset($user) && isset($password)&& isset($email) && isset($quater)) 
    { 
     try{ 
    $bdd = new PDO('mysql:host=localhost;dbname=library;charset=utf8', 'root', ''); 

} 
catch(Exception $e) 
{ 
     die('Erreur : '.$e->getMessage()); 
} 
$req = $bdd->prepare('INSERT INTO user(name, password, email, quater) VALUES(?,?,?,?)'); 
$req->execute(array('name'=> $user,'password'=>$password,'email'=>$email,'quater' => $quater)); 
} 
    else 
    { 
     echo "<p color=red >please fill all the fills above<p>"; 
    } 
?> 

得到以下错误倾斜插入件插入用PHP插入数据的基础上使用PDO

警告:PDOStatement对象::执行():SQLSTATE [HY093]:无效参数数:参数没有被定义在[ ...}

回答

2

您使用不同类型的占位符的位置。

当使用?作为占位符,绑定你没有名字,并在正确的顺序。如果您使用指定的占位符(例如:name),顺序并不重要,但数组中的密钥必须与命名占位符匹配。

所以,你的两个选项分别是

  1. 使用指定的占位符(我认为这是更容易阅读)
  2. 删除您执行阵列

所以在指标,与替代一个看起来像

$req = $bdd->prepare('INSERT INTO user (name, password, email, quater) VALUES (:name, :password, :email, :quater)'); 
$req->execute(array('name'=> $user, 'password' => $password, 'email' => $email, 'quater' => $quater)); 

请注意,我已经更换了所有的占位符,从?一个名为之一,:name

替代2看起来像这样

$req = $bdd->prepare('INSERT INTO user (name, password, email, quater) VALUES (?, ?, ?, ?)'); 
$req->execute(array($user, $password, $email, $quater)); 

在这里,你会看到占位符仍然?,但按键的执行数组中删除。

你可以在这里使用的密钥,但他们必须是0-3(因为它们是由PHP分配的缺省值)。

参考

+0

它仍然给这些相同的纠错它 –

+0

后,什么是你的代码看起来像现在? – Qirel