PHP, mysqli, Как мне подсчитать количество вставленных строк для запроса INSERT с вложенным SELECT? Не повезло сффектом

Оператор INSERT с SELECT в VALUES:

$stmt = $db->prepare("INSERT INTO weld_reference(weld_id,report_id) VALUES ((SELECT w.id FROM welds w WHERE w.weld_number=?),?)")

Приведенный ниже код перебирает массив пользовательских строк ($welds) и пытается вставить его идентификатор в таблицу. weld_reference если он существует в таблице welds,

    $stmt->bind_param("si",$weld_number,$_POST['report_id']);
    foreach($welds as $weld_number){
        if($stmt->execute() and $stmt->num_rows){
            ++$insert_count;
        }
    }   

Я не хочу делать другой запрос, чтобы увидеть, существует ли строка, я надеялся, что смогу получить количество строк или успех INSERT после каждого $stmt->execute().

Тем не мение, $stmt->affected_rows а также $stmt->insert_id всегда возвращает 1 и $stmt->num_rows всегда возвращается 0 была ли вставлена ​​строка или нет.

Как я могу прочитать это и посмотреть, была ли вставлена ​​строка, чтобы отправить пользователю точное сообщение обратной связи?

Я вижу, что за многие подобные вопросы проголосовали, но я думаю, что это немного по-другому, и я попробовал несколько углов, прежде чем задавать вопрос. Заранее спасибо.

1 ответ

Решение

Как вы проверяете стоимость $stmt->insert_id? Потому что он должен вернуть вам "Получить идентификатор, сгенерированный из предыдущей операции INSERT". Если только ou ($valuate), он вернет true (как 1)

То, как я это делаю, - это сохранение идентификаторов в массиве, чтобы у меня был хороший список того, что было вставлено.

$stmt->bind_param("si",$weld_number,$_POST['report_id']);
    foreach($welds as $weld_number){
        if($stmt->execute()){
          $insertedId[]=$stmt->insert_id;
        }
    } 
echo count($insertedId);

Или, так как идентификатор никогда не будет пустым, вы можете сделать

$stmt->bind_param("si",$weld_number,$_POST['report_id']);
    foreach($welds as $weld_number){
        if($stmt->execute() && !empty($stmt->insert_id)){
            $insert_count++;
           // ++$insert_count; //unaware of this syntax -.-
        }
    } 
Другие вопросы по тегам