Intereting Posts
Выбор и проверка наличия пользователя в таблице без foreach в ларавельном лезвии Symfony 2 Создайте поле формы объекта с двумя свойствами Автоматически создавать json-файл, в котором перечислены все изображения в каталоге? диспетчер иногда вызывает код из другого приложения Есть ли функция, аналогичная функции setTimeout () (JavaScript) для PHP? IMagicExtension: невозможно прочитать изображение из дескриптора файла перестроить массив php во вложенный иерархический массив Поиск ближайшего числового совпадения в базе данных с тем, что пользователь ввел в php PHP read_exif_data и настройка ориентации Лучший способ заменить смайлики в PHP? Преобразование String на сегодняшний день (от европейского до американского) Codeigniter AOP Как изменить пароль для отправки сообщения электронной почты в laravel? phpmailer – Следующая ошибка SMTP: данные не принимаются Вызов функции PHP с помощью AJAX, но перенаправление не работает

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

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

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

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

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

Solutions Collecting From Web of "Проверьте, существует ли запись"

Если вы знаете, как сделать 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 работает следующим образом:

  • Если запись, которую вы хотите вставить, не существует, 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('Ym-d') . "')"; if ($conn->query($sql) === FALSE) { echo "Error: " . $sql . "<br>" . $conn->error; } $conn->close();