php
  • mysqli
  • 2016-04-29 52 views 0 likes 
    0

    我想在更新statement時沒有結果時顯示錯誤,所以我嘗試使用此代碼,但沒有存在ID如何使用更新語句使用mysqli

    但是這段代碼總是給我success!但是我試圖用錯誤的id來測試它不存在!你能告訴我這段代碼有什麼問題嗎?

    <?PHP 
    include("config.php"); // For connection 
    
    $product_name = '52 inch TV'; 
    $product_code = '9879798'; 
    $find_id = 188; // id not exist should gives Error 
    
    $statement = $mysqli->prepare("UPDATE products SET product_name=?, product_code=? WHERE ID=?"); 
    $statement->bind_param('ssi', $product_name, $product_code, $find_id); 
    $results = $statement->execute(); 
    
    if($results){ 
        print 'Success! record updated'; 
    }else{ 
        print 'Error : ('. $mysqli->errno .') '. $mysqli->error; 
    } 
    ?> 
    

    回答

    1

    請使用下面的代碼

    if($statement->affected_rows > 0){ 
        print 'Success! record updated'; 
    }else{ 
        print 'Error : ('. $mysqli->errno .') '. $mysqli->error; 
    } 
    
    1

    使用mysqli_affected_rows$results = $statement->execute();。這會給你更新的行數。所以你可以檢查相應的

    1

    你目前的邏輯是probelm是你發出的查詢不會產生一個錯誤,它只是不更新​​任何行。

    如果你想確保一個錯誤嘗試進行查詢,所以它不會編譯。

    而且,作爲這些語句返回對象或false最好是使用===false專門測試,而不是一個if($var)

    <?php 
    include("config.php"); // For connection 
    
    $product_name = '52 inch TV'; 
    $product_code = '9879798'; 
    $find_id = 188; // id not exist should gives Error 
    
    $statement = $mysqli->prepare("UPDATE products 
                SET product_name=?, 
                 product_code = ? 
               WHERE IDXX = ?"); // <-- generate error 
    
    $statement->bind_param('ssi', $product_name, $product_code, $find_id); 
    $results = $statement->execute(); 
    
    if($results === false){ 
        print 'Error : ('. $mysqli->errno .') '. $mysqli->error; 
    }else{ 
        print 'Success! record updated'; 
    } 
    ?> 
    

    否則,如果你真的想知道,如果查詢其實修改的東西,你必須檢查受影響的行數

    <?php 
    include("config.php"); // For connection 
    
    $product_name = '52 inch TV'; 
    $product_code = '9879798'; 
    $find_id = 188; // id not exist should gives Error 
    
    $statement = $mysqli->prepare("UPDATE products 
                SET product_name=?, 
                 product_code = ? 
               WHERE ID = ?"); 
    
    $statement->bind_param('ssi', $product_name, $product_code, $find_id); 
    $results = $statement->execute(); 
    
    
    if($results === false){ 
        print 'Error : ('. $mysqli->errno .') '. $mysqli->error; 
    }else{ 
        print 'Success! record updated'; 
        echo sprintf('Query changed %d rows', $mysqli->affected_rows); 
    } 
    
    ?> 
    
    1

    我通常做的就是這樣的。

    此外,您需要確保您有一個字段或此記錄特有的內容。基本上,它總是插入它的編寫方式,因爲我們只是檢查一個值(生日)

    下面是一個例子
    $康恩=新的mysqli(「本地主機」,「用戶名」,「PWD」,「 D b');

     // check connection 
         if (mysqli_connect_errno()) { 
          exit('Connect failed: '. mysqli_connect_error()); 
         }   
           // check to see if the value you are entering is already there  
           $result = $conn->query("SELECT * FROM birthday WHERE name='Joe'"); 
           if ($result->num_rows > 0){ 
            // this person already has a b-day saved, update it 
            $conn->query("UPDATE birthday SET birthday = '$birthday' WHERE name = 'Joe'"); 
           }else{ 
            // this person is not in the DB, create a new ecord 
            $conn->query("INSERT INTO `birthday` (`birthday`,`name`) VALUES ('$birthday','Joe')"); 
           } 
    

    檢查額外的例子here

    相關問題