Проверьте, существует ли запись

Я нашел this на php.net, чтобы проверить, существует ли файл.

Я хочу проверить, существует ли запись сначала, а затем обновить, иначе вставить.

if(record exist) {
   update query}
else 
  { insert query}

Я знаю, как обновлять или вставлять, но не знаю, как проверить, существует ли запись в первую очередь. Как это делается?

Ответ 1

Если вы знаете, как сделать SQL SELECT, сделайте следующее:

$result = mysql_query("SELECT * FROM table1 WHERE something");
$num_rows = mysql_num_rows($result);

if ($num_rows > 0) {
  // do something
}
else {
  // do something else
}

Еще лучше, не делайте этого на PHP, используйте INSERT ... ON DUPLICATE KEY UPDATE.

Ответ 2

Вам не нужно делать это на PHP, вы можете сделать это непосредственно в SQL-запросе для своей базы данных (я предполагаю, что вы используете базу данных для записей, так как это похоже на ваш вопрос, и я буду предполагать MySQL, так как часто используется вместе с PHP).

INSERT INTO ... ON DUPLICATE KEY UPDATE;

Это приведет к вставке новой строки, если она еще не существует, или обновить текущий, если это произойдет, если ваши таблицы имеют первичные ключи.

Подробнее об этом читайте в Руководство по MySQL.

Другой вариант заключается в том, чтобы сначала выполнить запрос SELECT COUNT(1) FROM myTable WHERE ..., а затем сделать только вставку, если результат равен 0, в противном случае это обновление.

Ответ 3

вы также можете попробовать this

INSERT ... ON DUPLICATE KEY UPDATE

Ответ 4

Я бы порекомендовал решение Dominic Rodger, но с небольшим изменением, чтобы сделать его быстрее. Вы должны выбрать одно значение и не более одной строки.

$result = mysql_query("SELECT key FROM table1 WHERE something LIMIT 1");
$num_rows = mysql_num_rows($result);

if ($num_rows > 0) {
  // do something
}
else {
  // do something else
}

Если ваша запись уже существует, вы получите результат, который больше, чем 0 результатов, поэтому он работает, но потенциально с меньшим трафиком с вашего SQL-сервера.

Ответ 5

Записывать записи, соответствующие вашим критериям?

select count(*) from foo where id = 5

if($count > 0) {
    // record exists
    ...
}

Ответ 6

$username = $_POST["user"];

$query = mysql_query("SELECT * FROM users WHERE username='$username'");

if(mysql_num_rows($query) != 0)
{
echo "Username already exists";
}
else
{
//proceed with code here
}

Ответ 7

Вы можете сделать выбор для этой записи и проверить результат, или вы можете попробовать обновление и посмотреть, была ли ошибка. Если бы это было, то ничего не обновлялось, так же как и вставка.

Ответ 8

Вы можете установить конкретные столбцы в своей базе данных в качестве первичного ключа, а затем вставка будет успешной, только если у вас нет записи. Таким образом, вам не нужно проверять наличие записи.

Ответ 9

Странный никто не упомянул, используя REPLACE?

Ответ 10

У меня была такая же проблема, и я решил использовать REPLACE INTO, расширение MySQL работает следующим образом:

  • Если запись, которую вы хотите вставить, не существует, MySQL REPLACE вставляет новую запись.
  • Если запись, которую вы хотите вставить уже существует, MySQL REPLACE удаляет старую запись, а затем вставляет новую запись.

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

Помните, что для использования REPLACE необходимо иметь как привилегии INSERT, так и DELETE.

Здесь и пример, основанный на моем коде:

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$sql = "REPLACE INTO table_name (name, age, current_date)
       VALUES ('" . $name . "', $age, '" . date('Y-m-d') . "')";

if ($conn->query($sql) === FALSE) {
   echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();