php mysql обновить несуществующую запись

Я использую этот фрагмент php для вставки/обновления базы данных mysql. Пожалуйста, смотрите мой вопрос в части комментариев в соответствующих строках. Спасибо.

        //Connecting to your database
        mysql_connect($hostname, $username, $password) OR DIE ("Unable to connect to database! Please try again later.");
        mysql_select_db($dbname);

        arr = array();
        if (strcasecmp($actionIn, 'insert') == 0) {
           $query = "INSERT INTO $usertable (id, fname, lname) VALUES ('$id', '$fname', 'lname'";
           $result = mysql_query($query) or die(mysql_error()); //AT THIS STEP, I would get error message if I insert a duplicated id into table, no following json_encode would not print out, that's what I want.
           if ($result) {
              $arr['inserted'] = 'true';
           }
           exit(json_encode($arr));
        }

        if (strcasecmp($actionIn, 'update') == 0) {
           $query = "UPDATE $usertable SET id = '$id', fname = '$fname', lname = '$lname' WHERE id = '$id'";
           $result = mysql_query($query) or die(mysql_error()); //AT THIS STEP, if I update a non-existent id, I don't get error, and the following steps continue to execute. I want the error info or return me a false.
           if ($result) {
              $arr['updated'] = 'true';
           }
       exit(json_encode($arr));
        }

Я также пробовал это, но и num_rows, и затронутые_rows возвращают 0. почему?

       $row_cnt = $result->num_rows;
           printf("Result set has %d rows.\n", $row_cnt);
       $aff_cnt = $result->affected_rows;
       printf("Result set aff %d rows.\n", $aff_cnt);

Спасибо за вашу помощь!


person Tony Xu    schedule 10.11.2013    source источник


Ответы (1)


Если UPDATE не соответствует чему-либо для обновления, он просто вернется. Это не ошибка. Чтобы узнать, обновилось ли что-нибудь, используйте mysql_affected_rows().

Примечание. mysql_*() не поддерживает форму ООП, поэтому вам следует использовать mysql_affected_rows(), который должен работать для вашего второго случая выше.

Это даст вам:

if (strcasecmp($actionIn, 'update') == 0) {
       $query = "UPDATE $usertable SET id = '$id', fname = '$fname', lname = '$lname' WHERE id = '$id'";
       $result = mysql_query($query) or die(mysql_error()); 
       if (mysql_affected_rows() !== 0) {
          $arr['updated'] = 'true';
       }

Примечание: mysql_*() устарело и будет удалено. Вы должны использовать mysqli или PDO для нового кода.

person Community    schedule 10.11.2013