2013-01-16 81 views
-1

我想一次上傳多列,此代碼:MySQL查詢更新多列錯誤

function updateMultiple($idElement,$arrayFieldValues=""){ 

     $toSave=$arrayFieldValues?$arrayFieldValues:$_POST; 

     foreach($toSave as $field => $value) { 
        if (strpos($field, 'save_') === 0) { 
         $field = str_replace('save_', '', $field); 
         $updateString .= $field."='".addslashes($value)."', "; 
        } 
       } 
     $updateString = substr_replace($updateString ,"",-2); 

     $query="UPDATE ".$this->tab." 
      SET ".$updateString.", lastUser='".$usrId."' 
      WHERE ".$colName." = '".$idElement."'"; 
      $this->execute($query); 
    } 

但是我得到這個錯誤:

PDOStatement::execute() [pdostatement.execute]: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET Country='England', FirstName='John', LastName='Smith', lastUser='10' ' at line 2 

但對我來說這一切似乎是正確的!

+0

輸出查詢執行前,看看那。試圖確定你的退貨和格式化看起來很困難。看看PHP實際上認爲查詢看起來像什麼通常可以幫助您調試。 – Leeish

+2

'$ this-> tab'是否返回任何內容。我的猜測不是。 – Leeish

+0

迴應您的查詢! – vodich

回答

1

蒂姆的回答之後,你應該使用Prepared Statements。查看documentation的示例和其他文檔。總之,而不是$query="UPDATE ".$this->tab." SET ".$updateString.", lastUser='".$usrId."' WHERE ".$colName." = '".$idElement."'";使用:

$query = 'UPDATE '.$this->tab.' SET lastUser = :user WHERE '.$colName.' = :colvalue'; 
$pdo->execute(array(:user => $usrId, :colvalue => $idElement)); 

你還可以想使用的交易,但是這是一個練習留給讀者。

+0

順便說一下,謝謝你的建議,你建議的方式似乎更清潔,我會嘗試! – ghego1

+0

好人,@ ghego1,如果它適合你,如果你接受我的回答而不是你已經接受的回答,我會很感激。 – hd1

0

你錯過了一個。 UPDATE和SET之間。 嗯,也許。無論如何,發送給PDO的SQL都是不正確的。它缺少UPDATE關鍵字。 查看評論。

+1

我想他在表名和設置之間缺少一個空格。他有。沒有選項卡後? – Leeish

+0

不正確,他有一個空格,新行+ tab |空格。所以這不是問題。 –

+0

我認爲這是所有問題。大聲笑。問題是,這只是一個簡單的語法問題。錯誤消息顯示錯誤。 – Tim

0

你需要爲你的sql語句中的每一列提供一個值。 試試這個代碼:

$query="UPDATE ".$this->tab." SET ".$updateString."='yourString' , lastUser='".$usrId."' 
     WHERE ".$colName." = '".$idElement."'"; 
+3

我猜他的更新字符串包含'國家='英格蘭',名字='約翰',姓氏='史密斯'這是隻是謎與潛在的問題。我敢打賭,他的'$ this-> tab'是空字符串或其他東西。除非在執行之前將輸出發佈到查詢的外觀纔會知道。 – Leeish

+0

他正在編寫這樣的代碼: 「UPDATE」。$ this-> tab。「SET」。$ updateString。「,lastUser ='」。$ usrId。「' WHERE」。$ colName。「='」 。$ idElement 「'」。 請注意,列$ updateString在此代碼中沒有值! – KhalidTaha

+1

@Leeish你是對的!對不起,這可能是晚了..我已經完全忘了設置它... – ghego1

0

試試這個

$query="UPDATE news SET title='$title', date='$date', body='$body' WHERE newsID=$ID