2016-04-29 3 views
0

Я хочу показать ошибку, когда нет результатов при обновлении statement, поэтому я попытался использовать этот код, при этом ни один из них не существовал ID.Как использовать инструкцию update с помощью 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

Задача с вашей текущей логикой заключается в том, что выданный вами запрос не создает ошибку, поскольку он просто не обновляет строки.

Если вы хотите, чтобы у вас возникли проблемы, попробуйте сделать запрос, чтобы он вообще не компилировался.

Кроме того, как эти возвратных заявление объектов ИЛИ 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», " БД ");

 // 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

Смежные вопросы