PHP PDO оператор - работает как pdo-> query, не работает как pdo-> prepare - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть подготовленный оператор PHP PDO:

if ($_SERVER['REQUEST_METHOD'] =='DELETE') {
    $postdata = file_get_contents("php://input");
    $request = json_decode($postdata);
    $action = $request->action;
    if ($action == "delete_todo") {
        $id=$request->id;
        $sql="DELETE from tblTodo where id=?";      
        $stmt = $db->prepare($sql);
        $stmt->execute([$id]);
   }
}

Я использую Boomerang для тестирования API, и каждый раз, когда этот скрипт возвращает мне «500 внутренняя ошибка сервера».Если я изменю код на:

if ($_SERVER['REQUEST_METHOD'] =='DELETE') {
    $postdata = file_get_contents("php://input");
    $request = json_decode($postdata);
    $action = $request->action;
    if ($action == "delete_todo") {
        $id=$request->id;
        $sql="DELETE from tblTodo where id=".$id;     
        $stmt = $db->query($sql);
        $stmt->execute();
   }
}

, все будет работать как надо.Что я делаю не так в подготовленном заявлении PDO?

1 Ответ

0 голосов
/ 15 ноября 2018

По запросу.

Ваша версия PHP (5.3.7) не поддерживает синтаксис массива [] для $stmt->execute([$id]);.

Поэтому вам нужно изменить его на (array('id' => $id)).

В руководстве по массивам http://php.net/manual/en/language.types.array.php говорится:

Начиная с PHP 5.4, вы также можете использовать синтаксис короткого массива, который заменяет array () на [].

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