无效参数编号:第20行的C:\wamp\www\stage\core\addUsers.php中未定义参数

无效参数编号:第20行的C:\wamp\www\stage\core\addUsers.php中未定义参数,php,pdo,Php,Pdo,我得到这个错误无效的参数号:参数没有在第20行的C:\wamp\www\stage\core\addtUsers.php中定义 if(!empty($_POST["add_record"])) { require_once("connection.php"); $data = [ 'username' =>$_POST["username"], 'password' =>$_POST["password"], 'role' =>

我得到这个错误无效的参数号:参数没有在第20行的C:\wamp\www\stage\core\addtUsers.php中定义

    if(!empty($_POST["add_record"])) {
  require_once("connection.php");

  $data = [
    'username'  =>$_POST["username"],
    'password'  =>$_POST["password"],
    'role'   =>$_POST["role"],
    'photo'    =>$_POST["photo"],
    'nom-prenom'   =>$_POST["nom-prenom"] 
  ];
  $sql = "INSERT INTO users(username,password,role,photo,nom-prenom) VALUES (:username,:password,:role,:photo,:nom-prenom)";
  $statement = $pdo->prepare( $sql );
  $result = $statement->execute($data);
    if (!empty($result) ){
      header('location:users.php');
    }
}

您不能在占位符的名称中使用
-
。这将被理解为算术减法

考虑这个例子:

$pdo->prepare('SELECT :num-1')->execute(['num'=>5]);
它查找名为
:num
num
的参数,然后从中减去1。
一个好的IDE甚至可以通过突出显示以下内容来帮助您:
尽管使用字母,它会突出显示与列名相同的颜色,但也可能会遗漏


尝试使用不同的占位符名称,例如
:nom_prenom

是否有任何数组元素为空?切勿存储纯文本密码!请使用PHP来处理密码安全性。如果您使用的PHP版本低于5.5,则可以使用
密码\u hash()
。在散列之前,不需要对它们执行任何操作或使用任何其他清理机制。这样做会更改密码并导致不必要的额外编码。不,不存在空数组元素。我对密码使用sha1加密。不在此代码中,您不需要。SHA1对于密码不再足够。