SQLSTATE[HY093]:无效参数编号:绑定变量的数量与令牌的数量不匹配
我知道有几个问题都有同样的问题。但我已经检查了所有的答案,这个问题仍然无法解决。真希望有人能帮我。非常感谢!
session_start();
$cid = $_POST['cid'];
$pContent = $_POST['pContent'];
$sContent = $_POST['sContent'];
$insert = "INSERT INTO 'Card'('cardID', 'creator', 'primaryLanguage',
'secondaryLanguage', 'primaryContent', 'secondaryContent')
VALUES (:cid, 'abc', 'English', 'Chinese', ':pContent', ':sContent')";
try {
$stmt = $dbh->prepare($insert, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$stmt->bindValue(":cid", $cid, PDO::PARAM_INT);
$stmt->bindValue(":pContent", $pContent, PDO::PARAM_STR);
$stmt->bindValue(":sContent", $sContent, PDO::PARAM_STR);
$stmt->execute();
unset($stmt);
} catch (Exception $e) {
echo 'Exception : ' . $e->getMessage() . "'n";
die();
}
查询中很少出现错误。
-
列名不需要单引号
-
占位符的绑定值不需要单引号
所以查询应该是
INSERT INTO
Card(
cardID,
creator,
primaryLanguage,
secondaryLanguage,
primaryContent,
secondaryContent
)
VALUES
(
:cid,
'abc',
'English',
'Chinese',
:pContent,
:sContent
);
这是插入的正确语法:
INSERT INTO Card(cardID, creator, primaryLanguage,
secondaryLanguage, primaryContent, secondaryContent)
VALUES (:cid, 'abc', 'English', 'Chinese', :pContent, :sContent)
你的单引号太多了只有对字符串和日期常量使用单引号。您不必将它们用于参数,因为您将参数声明为字符串——MySQL足够聪明,可以知道字符串是什么
如果必须转义列或表名,请首先考虑重命名它,这样就不需要引号。但是,如果必须的话,可以使用倒勾而不是单引号。