Я выполнил то, что вы описываете, используя время цикла, так что каждая итерация создает заявление MySQL, который влияет один ряд. Внутри цикла я запускаю mysql_affected_rows(), а затем увеличиваю счетчик в зависимости от того, было ли возвращаемое значение равным 0 или 1. В конце цикла я повторяю обе переменные для просмотра.
Полная формулировка от MySQL Docs относительно функции mysql_affected_rows есть (уведомление есть 3 возможных значения, возвращаемые - 0, 1 или 2):
Для INSERT ... ON дубликатом ключа заявления UPDATE, пораженный -rows Значение в строке равно 1, если строка вставлена как новая строка, 2 если обновленная существующая строка обновлена и 0, если существующая строка установлена в ее текущие значения . Если вы укажете флаг CLIENT_FOUND_ROWS, значение поврежденных строк равно 1 (не 0), если существующая строка установлена в ее текущие значения .
(Sidenote - Я поставил $ countUpdate и $ countInsert и $ countUpdateNoChange до 0 до времени цикла):
Вот код, который я разработал, что работает для меня:
while (conditions...) {
$sql = "INSERT INTO test_table (control_number, name) VALUES ('123', 'Bob')
ON DUPLICATE KEY UPDATE name = 'Bob'";
mysql_query($sql) OR die('Error: '. mysql_error());
$recordModType = mysql_affected_rows();
if ($recordModType == 0) {
$countUpdateNoChange++;
}elseif($recordModType == 1){
$countInsert++;
}elseif($recordModType == 2){
$countUpdate++;
};
};
echo $countInsert." rows inserted<br>";
echo $countUpdateNoChange." rows updated but no data affected<br>";
echo $countUpdate." rows updated with new data<br><br>";
Надеюсь, я не сделал никаких опечаток, поскольку я воссоздал его для совместного использования, удаляя мои конфиденциальные данные.
Надеюсь, это поможет кому-то. Удачи!
Я не думаю, что ваш примерный запрос фактически обновит что-нибудь, только вставьте, поскольку не представляется первичным ключом, который вы не обновляете в предложении 'ON DUPLICATE KEY'. Это в основном становится простым INSERT, если вы делаете это, как в примере. –
IMHO вы должны использовать спусковой крючок ON INSERT. –
Я удалил код для примера, но полный оператор будет либо вставлять, либо обновлять. Мне просто интересно, как я могу подсчитать вставки и обновления для отображения пользователю –