<?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>";
}
?>
收到以下错误
警告:PDOStatement :: execute():SQLSTATE [HY093]:参数号无效:参数未在[...}中定义
答案 0 :(得分:2)
你在这里使用不同种类的占位符。
使用?
作为占位符时,无需按名称和正确顺序进行绑定。如果您使用的是命名占位符(例如:name
),则顺序无关紧要,但数组中的键必须与指定的占位符匹配。
所以你的两个选择是
因此,替代看起来像
$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
。
替代两个看起来像这样
$req = $bdd->prepare('INSERT INTO user (name, password, email, quater) VALUES (?, ?, ?, ?)');
$req->execute(array($user, $password, $email, $quater));
在这里你会看到占位符仍然是?
,但是在execute-array中删除了键。
你可以在这里使用密钥,但它们必须是0-3(因为它们被PHP默认分配)。
参考