2015-04-04 99 views
0

SQLSTATE [HY093]:无效的参数编号:绑定变量的数量不匹配的令牌数量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(); 
} 
+1

'':pContent',':sContent''不需要引号。也不要使用'''作为列名和表名 – Rizier123 2015-04-04 16:59:32

回答

1

查询中很少有错误。

  • 你不需要单引号的列名

  • 绑定值的占位符不需要单引号

所以查询应尽可能

INSERT INTO 
Card(
cardID, 
creator, 
primaryLanguage, 
secondaryLanguage, 
primaryContent, 
secondaryContent 
) 
VALUES 
(
:cid, 
'abc', 
'English', 
'Chinese', 
:pContent, 
:sContent 
); 
1

这是您的插入正确的语法:

INSERT INTO Card(cardID, creator, primaryLanguage, 
       secondaryLanguage, primaryContent, secondaryContent) 
    VALUES (:cid, 'abc', 'English', 'Chinese', :pContent, :sContent) 

你有太多的单引号。 只有字符串和日期常量使用单引号。您不必使用它们作为参数,因为您将参数声明为一个字符串 - 而且MySQL足够聪明,可以知道字符串是什么。

如果您必须转义列或表名称,请首先考虑重命名它,因此不需要引号。但是,如果您必须使用反引号而不是单引号。

相关问题