Проверьте, существует ли запись
Я нашел 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();