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();
}
答案 0 :(得分:1)
这是插入的正确语法:
INSERT INTO Card(cardID, creator, primaryLanguage,
secondaryLanguage, primaryContent, secondaryContent)
VALUES (:cid, 'abc', 'English', 'Chinese', :pContent, :sContent)
你的单引号太多了。 仅对字符串和日期常量使用单引号。您不必将它们用于参数,因为您将参数声明为字符串 - 而且MySQL足够聪明,可以知道字符串是什么。
如果必须转义列或表名,请首先考虑重命名,因此不需要引号。但是,如果必须,请使用反引号而不是单引号。
答案 1 :(得分:1)
查询中几乎没有错误。
您不需要列名称的单引号
占位符的绑定值不需要单引号
所以查询应该是
INSERT INTO
Card(
cardID,
creator,
primaryLanguage,
secondaryLanguage,
primaryContent,
secondaryContent
)
VALUES
(
:cid,
'abc',
'English',
'Chinese',
:pContent,
:sContent
);