PHP обновляет данные в MySQL непоследовательно, только иногда ОБНОВЛЯЕТСЯ

#php #ajax #insert #insert-update

#php #ajax #вставить #вставить-обновить

Вопрос:

У меня есть значения, которые используют метод GET для отправки переменных URL на страницу PHP с использованием Ajax.

На странице у меня есть:

 $value=$_GET["q"];
$id=$_GET["id"];
$mod=$_GET["mod"];
  

Я начал с использования метода UPDATE SET для изменения значений в базе данных MySQL.

Я использовал: $num_rows= mysql_num_rows($result);

С помощью If Else инструкции либо вставить значения (если их там нет), либо обновить столбец «Атрибут»

Но это было очень непоследовательно и часто не обновлялось, и появилось несколько повторяющихся значений (even though if($num_rows > 0){ (WHERE Object_ID = '".$mod."' AND Type='".$id."') , которые НЕ СЛЕДОВАЛО вставлять, но это было сделано.)

Итак, я переключился на это:

 $sql="SELECT * FROM Attributes WHERE Object_ID = '".$mod."' AND Type='".$id."'";
$result = mysql_query($sql);

    mysql_query("DELETE FROM Attributes WHERE Object_ID = '".$mod."' AND Type = '".$id."'");

    mysql_query("INSERT INTO Attributes (Object_ID, Type, Attribute)
        VALUES ('".$mod."', '".$id."', '".$value."')");
  

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

Я знаю, что переменные попадают на страницу, потому что ответ был бы записан в div с использованием innerHTML, и он всегда отображался правильно.

Как я могу гарантировать, что значения ВСЕГДА обновляются / вставляются в базу данных?

Ответ №1:

Почему бы не запустить SELECT COUNT (*) для условия и проверить, что это возвращает, и на основе этого запустить ваше ОБНОВЛЕНИЕ или ВСТАВКУ?

Ответ №2:

я действительно не понимаю, что не так с вашей работой с базой данных, но единственный способ убедиться в этом — отправить ответ из вашего php-скрипта в ajax. Это может быть json или простой текст, информирующий вас о том, какое действие было запрошено и что выполнено. В зависимости от ответа вы можете настроить то, что хотите.

Комментарии:

1. Да, отправленный ответ работает нормально. На самом деле это свойство CSS.

2. Да, я тоже не уверен, что не так с моим скриптом или базой данных!

Ответ №3:

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

  $update = "update tbl_name set column=value where id = $_GET['id']"
  

и если идентификатор не существует, то используйте вставку

$insert = «Вставить в …..»

надеюсь, это решит вашу проблему. И, кроме того, вам нужно повторить ответ здесь либо в строковом формате, либо в каком-либо другом значении, которое вы получите в методе успеха $.Ajax.

Комментарии:

1. Да, ответ успешно повторяется, но он просто не вставлен. Я попробую ваш метод и посмотрю, исправил ли он мою проблему!

Ответ №4:

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

Запускайте эти два запроса каждый раз, и все будет в порядке.

 mysql_query("DELETE FROM Attributes WHERE Object_ID = '$mod' AND Type='$id'"); 
mysql_query("INSERT INTO Attributes (Object_ID, Type, Attribute) VALUES ('$mod', '$id', '$value'");
  

И, пожалуйста, как минимум, прежде чем что-либо делать с $ _GET, сначала запустите их через mysql_real_escape_string . Вероятно, вам следует провести дополнительную проверку, просто чтобы убедиться, что переданные значения действительны.

 $value=mysql_real_escape_string($_GET["q"]); 
$id=mysql_real_escape_string($_GET["id"]); 
$mod=mysql_real_escape_string($_GET["mod"]);