SQLSTATE [HY093]:参数号无效(参数不匹配)

时间:2015-04-04 16:58:41

标签: php mysql pdo parameters

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();
}

2 个答案:

答案 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
);