简体   繁体   中英

PHP/SQL never updates only inserts

For some reason my insert/update check only ever inserts. the value userID does have a value so i dont know what is up with this. Any ideas?

$result = mysql_query("SELECT * FROM users where userID = $userID ");
if (mysql_num_rows($result) > 0) {
   mysql_query("UPDATE users SET firstName='$firstName', lastName='$lastName', 
             birthday='$birthday', update='$today', accessToken='$accessToken', emailOne='$emailOne' WHERE userID='$userId'");
} else {
   mysql_query("INSERT INTO users (userID, firstName, lastName, birthday, updated, accessToken, emailOne ) 
               VALUES ('$userId', '$firstName', '$lastName','$birthday', '$today', '$accessToken', '$emailOne')");
}

You'd be far better off doing INSERT ... ON DUPLICATE KEY UPDATE . Your version is subject to race conditions. It's entirely possible that between the time you do the SELECT * and then attempt the update/insert queries, ANOTHER script has already inserted the same ID number and then your script breaks. This also reduces the database load by one query.

As well, unless you've passed all those variables in the query through mysql_real_escape_string() , you'll probably be getting a visit from Little Bobby Tables .

From the way you're inserting the records, it seems that your userId field is a varchar (or alphanumeric) field. So your query NEVER reads the data that matches it since it is searching for it as a numeric. You've got to re-write the first line as:

$result = mysql_query("SELECT * FROM users where userID = '$userID' ");

Hope it helps.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM