Обновление данных PHP в MySQL Inconsistant, иногда только ОБНОВЛЕНИЯ - PullRequest
1 голос
/ 22 апреля 2011

У меня есть значения, которые используют метод 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, и он всегда отображаетсяправильно.

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

Ответы [ 4 ]

0 голосов
/ 22 апреля 2011

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

Запускайте эти два запроса каждый раз, и у вас все будет хорошо.что-нибудь с $ _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"]);
0 голосов
/ 22 апреля 2011

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

0 голосов
/ 22 апреля 2011

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

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

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

$ insert = "Вставить в ......"

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

0 голосов
/ 22 апреля 2011

Почему бы не запустить SELECT COUNT (*) для условия и проверить, что это возвращает, и на основании этого запустить UPDATE или INSERT?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...