2015-04-04 103 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足夠聰明,可以知道字符串是什麼。

如果您必須轉義列或表名稱,請首先考慮重命名它,因此不需要引號。但是,如果您必須使用反引號而不是單引號。

相關問題