2016-07-29 86 views
0

我要插入一些數據,是與JavaScript(科爾多瓦的應用程序)發送我送這個位置SQL INSERT查詢插入多次,不更新

var link = 'somelink'; 
     var stmt = "SELECT * FROM card WHERE Productsync = 0 "; 
     //console.log(stmt); 
     $cordovaSQLite.execute(db, stmt).then(function(res) { //console.log(res) 
      if(res.rows.length > 0) { 
       for (var i = 0; i < res.rows.length; i++){ 
        console.log(res.rows.item(i)); 
        console.log(res.rows.item(i).ProductName); 
        console.log(res.rows.item(i).ProductBarcode); 
        console.log(res.rows.item(i).ProductPakking); 
        console.log(res.rows.item(i).ProductPresent); 
        console.log(res.rows.item(i).ProductMinimuim); 
        console.log(res.rows.item(i).FotoUrl); 
        console.log(res.rows.item(i).DBid); 





        $http.post(link, {ProductName : res.rows.item(i).ProductName , ProductBarcode : res.rows.item(i).ProductBarcode , ProductPakking : res.rows.item(i).ProductPakking , ProductPresent : res.rows.item(i).ProductPresent , ProductMinimuim : res.rows.item(i).ProductMinimuim , FotoUrl : res.rows.item(i).FotoUrl , DBid : res.rows.item(i).DBid}).then(function (res){//sending data 
         console.log(res.data);//respone of server 
         var data = res.data; 
         for (var key in data) {//read out respone 
          if (data.hasOwnProperty(key)) { 
           var obj = data[key]; 
           console.log(obj); 
           //have to make this 
          } 
         } 

        }); 
       } 

      } 

     }); 

現在,我希望它在我的數據庫中添加此在線(BIND變量將我後來做)這是我的PHP腳本看起來像

$postdata = file_get_contents("php://input"); 
if (isset($postdata)) { 
    $request = json_decode($postdata); 

    $ProductName = $request->ProductName; 
    $ProductBarcode = $request->ProductBarcode; 
    $ProductPakking = $request->ProductPakking; 
    $ProductPresent = $request->ProductPresent; 
    $ProductMinimuim = $request->ProductMinimuim; 
    $FotoUrl = $request->FotoUrl; 
    $DBid = $request->DBid; 



    $ProductName = mysqli_real_escape_string($connection,$ProductName); 
    $ProductBarcode = mysqli_real_escape_string($connection,$ProductBarcode); 
    $ProductPakking = mysqli_real_escape_string($connection,$ProductPakking); 
    $ProductPresent = mysqli_real_escape_string($connection,$ProductPresent); 
    $ProductMinimuim = mysqli_real_escape_string($connection,$ProductMinimuim); 
    $FotoUrl = mysqli_real_escape_string($connection,$FotoUrl); 
    $DBid = mysqli_real_escape_string($connection,$DBid); 
    $query ="REPLACE into `card` (ProductName,ProductBarcode,ProductPakking,ProductPresent,ProductMinimuim,FotoUrl,DBid) 
     VALUES('" . $ProductName . "' , 
       '" . $ProductBarcode . "' , 
       '" . $ProductPakking . "' , 
       '" . $ProductPresent . "' , 
       '" . $ProductMinimuim . "' , 
       '" . $FotoUrl . "' , 
       '" . $DBid ."')"; 

當我在PHP查詢之前呼應$產品名稱,我只看到productsnames(我想)

我的問題em是:它不會替換值,如果它已經存在,並且它插入多次,它只需插入一次,如果該列已經存在,則替換或更新。

有人可以幫助我嗎?在PHP

更新查詢

  $query ="SELECT ProductName FROM `card` WHERE 
       `ProductName` = '" . $ProductName . "' AND 
       `ProductBarcode` = '" . $ProductBarcode . "' AND 
       `ProductPakking` = '" . $ProductPakking . "' AND 
       `ProductPresent` = '" . $ProductPresent . "' AND 
       `ProductMinimuim` = '" . $ProductMinimuim . "' AND 
       `FotoUrl` = '" . $FotoUrl . "' AND 
       `DBid` = '" . $DBid ."'"; 
     $result_set = mysqli_query($connection,$query); 
     if (mysqli_num_rows($result_set) == 0){ 
      $query ="INSERT INTO `card` (ProductName,ProductBarcode,ProductPakking,ProductPresent,ProductMinimuim,FotoUrl,DBid) 
      VALUES('" . $ProductName . "' , 
        '" . $ProductBarcode . "' , 
        '" . $ProductPakking . "' , 
        '" . $ProductPresent . "' , 
        '" . $ProductMinimuim . "' , 
        '" . $FotoUrl . "' , 
        '" . $DBid ."')"; 
      $result = mysqli_query($connection,$query); 

     }else{ 

      $query = "UPDATE `card` 
      SET `ProductName` = '" . $ProductName . "' , 
       `ProductBarcode` = '" . $ProductBarcode . "' , 
       `ProductPakking` = '" . $ProductPakking . "' , 
       `ProductPresent` = '" . $ProductPresent . "' , 
       `ProductMinimuim` = '" . $ProductMinimuim . "' , 
       `FotoUrl` = '" . $FotoUrl . "' , 
       `DBid` = '" . $DBid ."' 
      WHERE `ProductBarcode` = '" . $ProductBarcode . "' AND `DBid` = '" . $DBid ."'"; 

      $fines = mysqli_query($connection,$query); 


     } 
+1

如果我是正確的,'userID'是'card'表的主鍵,並且你沒有將'userID'傳遞給'REPLACE'查詢。 – antorqs

+0

對不起,我的壞,我還有工作的答覆呢,它只是關於數據庫在線... –

回答

0

請注意,這種方法(或REPLACE INTO的辦法,甚至對重複鍵的方法)是全成你需要有領域的唯一索引你不想重複。

docs狀態

更換使得只有當一個表有一個主鍵或唯一索引的意義。否則,它就等同於INSERT,因爲沒有用於確定新行是否與其他行重複的索引。

+0

所以REPLACE在這種情況下不是一個選項,你對這種情況的建議是什麼。如果不存在,則需要插入並更新(如果存在) –

+0

在執行插入操作之前,選擇要插入所有值的行。如果選擇返回行,那麼你會更新它,否則插入。 – Tamil

+0

我作了一個查詢。但它似乎不工作。查詢是否正確或是否存在其他問題,更新是在問題 –

0

看起來你有以下線

console.log(res.data);//respone of server 
var data = res.data; 
for (var key in data) { 

這個循環有一定的問題,因爲如果它的JSON然後遍歷所有關鍵的一招一式按鍵記錄按鍵的它插入多個injson *數一些問題時間響應

請提供res.data日誌,並檢查您在密鑰中獲取的內容以及循環該循環的次數。

+0

噢,是的,但這是答覆,我會在稍後做出。我現在的問題是插入。當我處理回覆數據時,我會考慮你說的話並找到解決辦法 –