MySQL Удалить элемент из таблицы не работает - PullRequest
1 голос
/ 13 мая 2011

Я пытаюсь удалить запись в моей базе данных на основе уникального идентификатора ($ id). Что-то не так с этим кодом? Вероятно, простой для вас PHP Pro.

    function delAccount(){  

         mysql_query("DELETE FROM accounts WHERE id=".$id."LIMIT 1");

        }

Я получаю:

    Fatal error: Can't use function return value in write context in     
    /home/content/53/7311353/html/cca/accounts/include/processAct.php on line 15

Мой класс, который у меня есть все:

    class Accounts
        {

    function Accounts(){
        if (isset($_POST['addacct'])){
            $this->addAccount();
        }elseif(isset($_POST['editacct'])){
            $this->editAccount();
        }elseif(isset($_POST['delacct'])){
            $this->delAccount();
        }else{
            // redirect if loaded without a POST value set
            header("Location: ../index.php?o=illegal&t=nodata");
        }
    }

Ответы [ 5 ]

2 голосов
/ 13 мая 2011

Прежде всего, вы должны поставить пробел между ". $ Id." И ОГРАНИЧИТЬ так:

mysql_query("DELETE FROM accounts WHERE id=".$id." LIMIT 1");

Во-вторых, $ id НЕ доступен в этой функции по умолчанию. Либо сделать это:

function delAccount($id) {  
  mysql_query("DELETE FROM accounts WHERE id=".$id." LIMIT 1");
}

и использовать delAccount ($ id_parameter); в вашем скрипте, чтобы отправить идентификатор вместе с функцией. Или попробуйте это:

function delAccount() {  
  global $id;
  mysql_query("DELETE FROM accounts WHERE id=".$id." LIMIT 1");
}

затем вы можете вызвать эту функцию после установки значения $id где-нибудь еще в вашем коде.

1 голос
/ 13 мая 2011

Ваша ошибка от компилятора PHP. Вы делаете что-то подобное в строке 15:

if (delAccount(...) = false) { ... }

? Если это так, измените на ==.

1 голос
/ 13 мая 2011

Некоторые советы о том, как отлаживать подобные вещи.

  • Если вы подозреваете, что что-то не так, первое, что нужно сделать - вывести сгенерированный запрос. Вот так:

    $query = "DELETE FROM accounts WHERE id=".$id."LIMIT 1";
    echo $query; // for debugging
    

    Это покажет вам, что по крайней мере одна вещь не так с вашим запросом: у вас пропущен пробел до LIMIT.

  • mysql_query() возвращает false, если обнаружена ошибка. Вы можете проверить это и вывести его, используя mysql_error(). Вот так:

    $result = mysql_query($query);
    if(!$result) trigger_error("Database error!: ".mysql_error());
    
  • Если $id приходит извне, например, массив $ _GET, убедитесь, что вы проверяли, является ли оно целым числом, прежде чем использовать его в запросе, чтобы избежать SQL-инъекции .

1 голос
/ 13 мая 2011

Первое: действительно ли значение для $ id является идентификатором в базе данных? Во-вторых, вам нужно пробел перед "LIMIT", то есть:

" LIMIT 1".
1 голос
/ 13 мая 2011

Вы уверены, что $ id установлен?

Если $ id должен быть отправлен в функцию в качестве аргумента, попробуйте это:

function delAccount($id) {
    mysql_query("DELETE FROM accounts WHERE id=" . $id . " LIMIT 1");
}

РЕДАКТИРОВАТЬ: Вы пропустили пробел между ID и ПРЕДЕЛОМ.

Добавлено несколько небольших улучшений в форме строки запроса:

function delAccount($id) {
    mysql_query("DELETE FROM `accounts` WHERE `id` = " . $id . " LIMIT 1");
}

EDIT:

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

...