2016-11-20 79 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