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 -.-
}
}