无效的参数编号:绑定变量的数量与令牌数量不匹配SQL

问题描述:

我在制作一个网站,我不需要使用PHP和PDO从表单发送信息。无效的参数编号:绑定变量的数量与令牌数量不匹配SQL

PHP代码:

$query = 'INSERT INTO commentary (name, surname, email, user_comment, user_id) VALUES (:name, :surname, :email, :user_comment, '.$_SESSION['id'].') '; 

$query_p = array(':name' => $_POST['name'],':surname' => $_POST['surname'], ':email' => $_POST['email'],':user_comment' => $_POST['email'], ':user_id'=>$_SESSION['id']); 

try 
{ 
    $statment = $dbh->prepare($query); 
    $result = $statment->execute($query_p); 
} 
catch(PDOException $e) 
{ 

    die("Can't run this query: " . $e->getMessage()); 
} 

HTML代码:

<h1 class="contactHeader"> Form</h1> 
<div class="form"> 
<form id="contact" name="contact" method="post" action="user.php" onreset="return confirm('Chcete to vymázat?')" method="post"> 

    <label class="leftElement" for="name">Name </label><span class="required">*</span><br /> 
    <input class="leftElement" id="name" name="name" type="text" ><br /> 
    <label class="centerElement" for="surname">Surname:</label><span class="required">*</span><br /> 

    <input class="centerElement" type="text" name="surname" id="surname"><br /> 
    <label class="leftElement" for="email">Email: </label><span class="required">*</span><br /> 
    <input class="leftElement" type="text" name="email" id="email"><br /> 
    <label class="centerElement" for="user_comment">Comment:</label><br /> 


    <textarea 
    class="centerElement" id="user_comment" name="user_comment" rows="7" cols="30"></textarea><br /> 
    <input type="submit" name="submit" id="submit" value="Send"> 
    <input type="reset" name="reset" id="reset" value="Reset"> 
</form> 

在表数据库 “comentary” 我有ID,姓名,电子邮件,USER_COMMENT和USER_ID我得到表单会话$_SESSION['id'] 。但是,当我尝试发送此表单时,出现错误SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens, 可能是我做错了什么?数据库连接正常。我已经控制了它。

谢谢。

+0

错误消息是不言自明的。你试图将更多的值传递给'execute',而不是你在查询中拥有':placeholders'! – deceze

+0

@deceze你的意思是问题出在user_id? – Lemmy

+0

是的,您的查询中没有令牌':user_id'。 – deceze

$query = 'INSERT INTO commentary (name, surname, email, user_comment, user_id) VALUES (:name, :surname, :email, :user_comment, '.$_SESSION['id'].') '; 

$query_p = array(':name' => $_POST['name'],':surname' => $_POST['surname'], ':email' => $_POST['email'],':user_comment' => $_POST['email'], ':user_id'=>$_SESSION['id']); 

您没有为您的user_id设置一个:占位符,因此请勿在execute中设置一个。

+0

这样做了。谢谢! – Lemmy

+0

您的答案查询和疑问查询有什么不同? – Monty

+0

没有什么区别,我张贴了两行来显示我在说什么。 – tkausl