Я нашел это на php.net, чтобы проверить, существует ли файл.
Я хочу проверить, существует ли запись сначала, а затем обновить, иначе вставить.
if(record exist) { update query} else { insert query}
Я знаю, как обновлять или вставлять, но не знаю, как проверить, существует ли запись в первую очередь. Как это делается?
Если вы знаете, как сделать 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
.
Вам не нужно делать это на PHP, вы можете сделать это непосредственно в SQL-запросе для своей базы данных (я предполагаю, что вы используете базу данных для записей, так как это то, что похоже на ваш вопрос, и я Предположим, MySQL, поскольку это часто используется вместе с PHP).
INSERT INTO ... ON DUPLICATE KEY UPDATE;
Это приведет к вставке новой строки, если она еще не существует, или обновите текущий, если это произойдет, если в ваших таблицах есть первичные ключи.
Дополнительную информацию об этом см. В Руководстве по MySQL .
Другой вариант – просто сначала SELECT COUNT(1) FROM myTable WHERE ...
запрос SELECT COUNT(1) FROM myTable WHERE ...
, а затем сделать только вставку, если результат равен 0, в противном случае – обновление.
вы также можете попробовать
INSERT ... ON DUPLICATE KEY UPDATE
Я бы рекомендовал решение Доминика Роджера, но с небольшими изменениями, чтобы сделать его быстрее. Вы должны выбрать одно значение и не более одной строки.
$ result = mysql_query ("SELECT key FROM table1 WHERE something LIMIT 1"); $ num_rows = mysql_num_rows ($ result); if ($ num_rows> 0) { // сделай что-нибудь } else { // делать что-то еще }
Если ваша запись уже существует, вы получите результат, который больше, чем 0 результатов, поэтому он работает, но потенциально с меньшим трафиком с вашего SQL-сервера.
Записывайте записи, соответствующие вашим критериям?
select count(*) from foo where id = 5 if($count > 0) { // record exists ... }
$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 }
Вы можете сделать выбор для этой записи и проверить результат, или вы можете попробовать обновление и посмотреть, была ли ошибка. Если бы это было, то ничего не обновлялось, так же как и вставка.
Вы можете установить конкретные столбцы в своей базе данных в качестве первичного ключа, а затем вставка будет успешной, только если у вас уже нет записи. Таким образом, вам не нужно проверять наличие записи.
Странно, что никто не упоминал использование REPLACE?
У меня была та же проблема, и я решил использовать REPLACE INTO, расширение MySQL работает следующим образом:
Я нашел этот метод полезным, когда мне не нужно помнить старые значения записи. Например, если вы хотите увеличить значение, этот метод не является отличным способом, поскольку также удаляет старую запись и старые значения.
Помните также, что для использования 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('Ym-d') . "')"; if ($conn->query($sql) === FALSE) { echo "Error: " . $sql . "<br>" . $conn->error; } $conn->close();