Проблеми видалення рядка MySQL в PHP

Я досить новий для PHP і mySQL, і тому я дуже заплутався, чому це не працює:

$row = mysql_fetch_array($result);

$response["id"] = $row["id"];
mysql_query(" DELETE FROM balloons WHERE ID='$response['id']'");
$response["name"] = $row["name"];
$response["message"] = $row["message"];
$response["city"] = $row["city"];
$response["time"] = $row["date"];

$response["success"] = 1;

Я в основному хочу видалити рядок відразу. Я спробував тонну різних речей, і я думаю, що мій синтаксис повинен бути десь неправильним. Я спробував сказати

$todelete = $response["id"];
mysql_query(" DELETE FROM balloons WHERE ID='$todelete'");

Але нічого хорошого. Що дивно, якщо я скажу

 mysql_query(" DELETE FROM balloons WHERE ID=4");

він видаляє рядок з ідентифікатором 4 просто чудово.

Я впевнений, що це дійсно німа помилка, чи може хтось виховувати мене?

0
Спочатку спробуйте повторити рядок sql і перевірте, чи має він ідентифікатор.
додано Автор kuldeep.kamboj, джерело
Не використовуйте функції mysql_ * для нового коду. зберігаються і офіційно не використовуються. Див. червоне поле ? Ви можете скористатися PDO або MySQLi замість цього - ця стаття допоможе вирішити, які.
додано Автор jcsanyi, джерело

7 Відповіді

Це виглядає як проблема форматування рядків. Ось кілька варіантів:

mysql_query("DELETE FROM balloons WHERE ID = '{$row['id']}'");

mysql_query("DELETE FROM balloons WHERE ID = '" . $row['id'] . "'");

// Or try this

$todelete = $row["id"];

mysql_query("DELETE FROM balloons WHERE ID = '$todelete'");

mysql_query("DELETE FROM balloons WHERE ID = '" . $todelete . "'");

Переконайтеся, що код не піддається SQL ін'єкції!

1
додано
@ user1903064 - Ви помістили рядок у mysql_query() ?
додано Автор Aiias, джерело
@ user1903064 - Оновлена ​​відповідь для використання $ row ['id'] .
додано Автор Aiias, джерело
Як правило, це означає, що $ row ['id'] не налаштовано належним чином/ініціалізовано або не відповідає очікуваним. Ви можете перевірити це за допомогою echo var_export ($ row, TRUE); , щоб побачити, яке значення знаходиться в $ row ['id'] , перш ніж передати його до запиту.
додано Автор Aiias, джерело
Жоден з них не працював: (Я думаю, що це повинно бути пов'язано з типом $ response ['id']. Наприклад, кажучи $ id = 7, а потім роблять DELETE WHERE id = $ id працює просто чудово. = $ response ['id'] не добре.
додано Автор bob, джерело
Так, не добре. Я дуже збентежений ...
додано Автор bob, джерело
Я в збитку. Я не хочу витрачати більше вашого часу, так як це таке дивне питання, що, можливо, щось інше йде не так, як я знаю ... але я не розумію, чому $ id = 8 "DELETE FROM balloons WHERE = $ id "працює, тоді як $ id = $ row ['id']" DELETE FROM balloons WHERE id = $ id "не працює. Я навіть спробував відправити $ id як int ... Це так дивно. EDIT і я знаю $ row ['id'] не є нульовим, оскільки я повторюю його, і це завжди число. Настільки плутають.
додано Автор bob, джерело
Дякую. Я продовжу шукати в цьому і оновлювати, коли/якщо я знайду відповідь!
додано Автор bob, джерело

Перевір це

mysql_query(" DELETE FROM balloons WHERE ID='$todelete'");

змінити цей рядок на

mysql_query(" DELETE FROM balloons WHERE ID='".$todelete."'");
1
додано

Спробуйте це:

$ todelete = $ row ["id"];

$ query = "DELETE FROM balloons WHERE ID =" $ todelete "";

0
додано

Спочатку збережіть значення змінної

 $id=$response['id'];
 mysql_query("DELETE FROM balloons WHERE ID='$id'");

якщо 'id' - це ціле число, яке не потрібно зберігати в лапках. Ви можете писати так

 mysql_query("DELETE FROM balloons WHERE ID=$id");
0
додано
Я насправді спробував це, не добре. Я чесно не маю, чому. Зараз я дивлюся на інші пропозиції ... (але спасибі!)
додано Автор bob, джерело

Чи отримуєте ви правильне значення для $ row ['id'] і $ result?

Ви спробували скинути $ result та $ row ['id']?

Спробуйте

 var_dump($result);

Якщо він дає вам правильний масив із потрібними значеннями. Ви можете зробити:

 $row = mysql_fetch_array($result);

 $todelete = $row["id"];
 mysql_query(" DELETE FROM balloons WHERE ID='$todelete'");

Або вам може знадобитися зробити це:

 while($row = mysql_fetch_array()){
           $todelete = $row["id"];
           mysql_query(" DELETE FROM balloons WHERE ID='$todelete'");


  }

Спробуйте doing var_dump() of $result, $row, $row['id'] etc on each steps to DEBUG.

0
додано

Все, що потрібно зробити, це

mysql_query(" DELETE FROM balloons WHERE ID=' " .$response['id']. " ' ");

або скоріше просто скористайтеся цим

mysql_query(" DELETE FROM balloons WHERE ID=' " .$row['id']. " ' ");

Також, сподіваюся, ви перевірили, чи отримуєте ви правильний результат у рядку ['id']

0
додано

Спробуйте це.

mysql_query("DELETE FROM default_ps_products WHERE ID='".$todelete."'");

або ви також можете використовувати це

mysql_query("DELETE FROM default_ps_products WHERE ID=$todelete");

він буде працювати нормально. сподіваюся, ви знайшли своє рішення.

0
додано
Ukrainian PHP comunity
Ukrainian PHP comunity
885 учасників

dev-ua/php