2016-02-13 73 views
0

我正在嘗試基於this thread第一次準備好的語句。到目前爲止,我收到錯誤消息SQLSTATE[HY000]: General error: 1 near "ON": syntax error下面是該查詢隨後try塊:PDO「在重複密鑰更新」準備語句

$query = "INSERT INTO results2015_2016 ('id','ata','atc','atcommon','atn','ats','atsog','hta','htc','htcommon','htn','hts','htsog','bs','bsc','canationalbroadcasts','gcl','gcl1','gs','r1','usnationalbroadcasts') 
      VALUES (':id',':ata',':atc',':atcommon',':atn',':ats',':atsog',':hta',':htc',':htcommon',':htn',':hts',':htsog',':bs',':bsc',':canationalbroadcasts',':gcl',':gcl1',':gs',':r1',':usNationalBroadcasts') 
      ON DUPLICATE KEY UPDATE id= ':id2'"; 
try { 
    $db = new PDO('db info'); 
    $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 
    $stmt = $db->prepare($query); 
    $stmt->bindParam(':ata', $ata, PDO::PARAM_STR); 
    $stmt->bindParam(':atc' , $atc , PDO::PARAM_STR); 
    $stmt->bindParam(':atcommon', $atCommon , PDO::PARAM_STR); 
    $stmt->bindParam(':atn', $atn , PDO::PARAM_STR); 
    $stmt->bindParam(':ats', $ats , PDO::PARAM_INT); 
    $stmt->bindParam(':atsog', $atsog , PDO::PARAM_INT); 
    $stmt->bindParam(':hta', $hta , PDO::PARAM_STR); 
    $stmt->bindParam(':htc', $htc , PDO::PARAM_STR); 
    $stmt->bindParam(':htcommon', $htCommon , PDO::PARAM_STR); 
    $stmt->bindParam(':htn', $htn , PDO::PARAM_STR); 
    $stmt->bindParam(':hts', $hts , PDO::PARAM_INT); 
    $stmt->bindParam(':htsog', $htsog , PDO::PARAM_INT); 
    $stmt->bindParam(':bs', $bs , PDO::PARAM_STR); 
    $stmt->bindParam(':bsc', $bsc , PDO::PARAM_STR); 
    $stmt->bindParam(':canationalbroadcasts', $caNationalBroadcasts , PDO::PARAM_STR); 
    $stmt->bindParam(':gcl', $glc , PDO::PARAM_BOOL); 
    $stmt->bindParam(':gcl1', $glc1 , PDO::PARAM_BOOL); 
    $stmt->bindParam(':gs', $gs , PDO::PARAM_INT);  
    $stmt->bindParam(':r1', $r1 , PDO::PARAM_BOOL); 
    $stmt->bindParam(':usnationalbroadcasts', $usNationalBroadcasts , PDO::PARAM_STR); 
    $stmt->bindParam(':id', $idGame , PDO::PARAM_INT); 
    $stmt->bindParam(':id2', $idGame , PDO::PARAM_INT); 
    $stmt->execute(); 
} catch (Exception $e) { 
     echo $e->getMessage(); 
     exit; 
    } 

我似乎無法找到很多關於此錯誤消息,它與我的情況該怎麼辦。這段代碼在解析jsonp的循環中...如果需要,我可以發佈整個代碼。

+0

是什麼讓你覺得SQLite支持這種語法? –

+1

它在哪裏提到sqlite? – RamRaider

回答

1

使用準備好的語句時,不需要將您的參數包含在任何類型的引號內。這將通過發動機本身照顧:

$query = "INSERT INTO x(a,b,c,d) VALUES(:a, :b, :c, :d)"; 
-1

正如@ HJPotter92注意 - 在SQL中的佔位符不應該被引用,同時也應該注意到,字段名應該與反引號括起來,而不是單引號(或咱這名不屬於保留&不包含空格等)

$query = "insert into results2015_2016 (
       `id`,`ata`,`atc`,`atcommon`,`atn`,`ats`,`atsog`,`hta`, 
       `htc`,`htcommon`,`htn`,`hts`,`htsog`,`bs`,`bsc`,`canationalbroadcasts`,`gcl`,`gcl1`, 
       `gs`,`r1`,`usnationalbroadcasts` 
     ) values (
      :id,:ata,:atc,:atcommon,:atn,:ats,:atsog,:hta,:htc,:htcommon,:htn,:hts, 
      :htsog,:bs,:bsc,:canationalbroadcasts,:gcl,:gcl1,:gs,:r1,:usnationalbroadcasts 
     ) on duplicate key update id=:id2";