sql >> Databasteknik >  >> RDS >> Mysql

Gör skillnad mellan "inga rader påverkades" och rader som har uppdaterats framgångsrikt - till samma värde (MySQL och PHP)

En enkel lösning skulle vara två frågor.

Kör först en SELECT-fråga för att kontrollera om raden existerar med mysqli_num_rows().

Sedan, om raden finns, kan du köra UPDATE-frågan och använda mysqli_affected_rows().

[EDIT]

...Jag ska föreslå ett potentiellt alternativ för alla som söker ett enstaka samtal. Jag vet inte om du är intresserad av att göra några INSERT, eller rena UPPDATERINGAR. Nedan finns lite att tänka på:

Från toppkommentaren @ http://php.net/manual/en/ mysqli.affected-rows.php :

På "INSERT INTO ON DUPLICATE KEY UPDATE"-förfrågningar, även om man kan förvänta sig att affected_rows endast returnerar 0 eller 1 per rad på framgångsrika frågor, kan det faktiskt returnera 2.

Från Mysql-manualen:"Med PÅ DUBLIKATNYCKELUPPDATERING är värdet för de berörda raderna per rad 1 om raden infogas som en ny rad och 2 om en befintlig rad uppdateras."

Se:http://dev.mysql.com /doc/refman/5.0/en/insert-on-duplicate.html

Här är summan per rad :

+0:​​en rad har inte uppdaterats eller infogats (troligen för att raden redan existerade, men inga fältvärden ändrades faktiskt under UPPDATERING)

+1:en rad infogades

+2:en rad uppdaterades

Kan du få det att passa dina behov?




  1. Hur man använder MELLAN-operatören i SQL Server

  2. Vad är tidsenheten i MySQL:s långsamma frågelogg?

  3. PDO PHP bindValue fungerar inte

  4. Strängaggregation genom åren i SQL Server