无效的参数编号:绑定变量的数量与令牌数量不匹配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,
可能是我做错了什么?数据库连接正常。我已经控制了它。
谢谢。
答
$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
中设置一个。
错误消息是不言自明的。你试图将更多的值传递给'execute',而不是你在查询中拥有':placeholders'! – deceze
@deceze你的意思是问题出在user_id? – Lemmy
是的,您的查询中没有令牌':user_id'。 – deceze