2014-12-30 13 views
2

我知道它的東西很愚蠢,我在這裏錯過了,但其他時候在下面的代碼中執行,0被添加到我的專欄grupa_id(它的評論#prikaz plana)當它實際上應該從我的另一個名爲grupa的表中選擇最大的ID。當'如果'發生時一切都很好,正確的數據被插入到數據庫中,甚至在我放入'(選擇MAX(id)FROM grupa)'而不是變量$ dataId時插入了正確的數據。任何人都可以看到我在這裏錯過了什麼?在數據庫中插入的值是0,即使它不應該爲

$dataId; 
      $Data = $ks->getQuery("SELECT id, naziv from grupa WHERE naziv='$postNazivGrupe'"); 
      if($Data->num_rows>0) 
      { 
       while($Row = $Data->fetch_assoc()) 
       { 
        $dataId = $Row['id'];    
       } 
      } 
      else 
      { 

       $Data = $ks->getQuery("INSERT into grupa(oznaka_grupe, naziv, nadgrupa) VALUES ('$postOznaka_grupe', '$postNazivGrupe', '$postNazivNadgrupe')"); 
       $dataId ="(select MAX(id) FROM grupa)"; 
      } 


      ##upis plana 
      $Data = $ks->getQuery("UPDATE plan SET grupa_id='$dataId' WHERE id=$postID"); 
+0

,是'grupa_id'是'varchar'列吧? – vaso123

+0

你很容易受到SQL注入攻擊http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php – Dallin

+0

它的int列。 @Dallin感謝張貼人im意識到這一點,這只是localhost項目,所以我沒有打擾太多,以保護它。 – Chilipepper

回答

1

在你的其他情況下,你正在生成一個無效數據ID

$dataId ="(select MAX(id) FROM grupa)"; 

這不是一個有效的數據ID,該查詢的結果將是。以前的回答是正確的,不知道爲什麼它被刪除。

這使得您的查詢,成爲這一

"UPDATE plan SET grupa_id='(select MAX(id) FROM grupa)' WHERE id=$postID" 

如果這是你打算怎麼它是,除去周圍的變量單引號即可。使用單引號不會執行該子查詢並嘗試將整個查詢作爲值,但由於該字段是數字,因此它將轉換爲0.刪除更新查詢中圍繞$dataId的單引號。

這個版本是罰款

"UPDATE plan SET grupa_id=(select MAX(id) FROM grupa) WHERE id=$postID" 
+0

是的,這就是我的目標,刪除報價完美。謝謝! – Chilipepper

+0

因爲OP悲傷:'所以萬一'else'發生grupa_id應該是這樣的:(選擇MAX(id)FROM grupa)'我想,他想插入這個字符串,而不是查詢的結果。 – vaso123

相關問題