2013-07-15 181 views
0

PHP:PDO插入查詢失敗

if(strcasecmp($refId, 'guest') == 0) 
    { 
     if(strcasecmp($amount, '24.95') == 0) 
     { 
       $credits = 20; 
       $plan = 'cool';  
     } 
     if(strcasecmp($amount, '45.95') == 0) 
     { 
      $credits = 40; 
      $plan = 'awesome'; 
     } 
     if(strcasecmp($amount, '69.95') == 0) 
     { 
      $credits = 60; 
      $plan = 'Supreme'; 
     } 

      $keyy = generate_key_string(); 
      $query = $pdo->prepare("INSERT INTO keys (keys_key, keys_plan, keys_credit) VALUES (?, ?, ?)"); 
      $query->bindValue(1, $keyy); 
      $query->bindValue(2, $plan); 
      $query->bindValue(3, $credits); 
      if(!$query->execute()) 
      { 
       echo 'failed' . '<br/>'; 
       echo $plan . '<br/>'; 
       echo $keyy . '<br/>'; 
       echo $credits; 

      }   
    } 

SQL表:

CREATE TABLE `keys` (
    `keys_key` varchar(29) NOT NULL, 
    `keys_credits` int(11) NOT NULL, 
    `keys_plan` varchar(255) NOT NULL, 
    PRIMARY KEY (`keys_key`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 

我知道的值是有,因爲這是我的輸出

failed 
cool 
CDGSI-DUEXP-M9BUZ-4VMQA-YSLIU 
20 

查詢似乎沒有正在爲這個插入工作,我在其他頁面上有不同的插入功能,他們工作正常。由於

+0

嘗試添加'的var_dump($查詢 - > ERRORINFO())'來查看查詢產生的錯誤。 – andrewsi

+0

'array(3){[0] => string(5)「42000」[1] => int(1064)[2] => string(226)「您的SQL語法錯誤; (key_key,keys_plan,keys_credit)VALUES('B1VN9-GVPQ1-RT9X3-0BHBU-I2PIU','at line 1「}'如果keys_key的varchar爲'只是文字? – ZZPLKF

+1

請參閱echo_me的回答:) – andrewsi

回答

4

keysreserved keyword如果通過反引號使用保留的關鍵字,你應該逃避你的列和表

INSERT INTO `keys` 
+0

只是讓評論downvoter,也許我可以提高我的答案 –

+0

我不知道你爲什麼downvoted。您可能想要添加一個建議以避免將保留字用作列名或表名,但這是我能想到的唯一改進。 – andrewsi

+0

謝謝,當我命名錶'key'時,我很擔心關鍵字,但我認爲這將是一個關鍵字,所以我將來將它命名爲'keys',我一定會使用反引號或命名它們有些不同!謝謝! – ZZPLKF