Обновите поле в таблице sql с помощью PHP

#php #mysql #sql

#php #mysql #sql

Вопрос:

В моей базе данных есть таблица с идентификатором полей, состоянием, номером и датой.

Что мне нужно, так это обновить состояние записи, соответствующее идентификатору, который используется в качестве параметра.

Я делаю следующее, но результата нет:

 static public function mdlUpdateField($table, $id){

    $stmt = Conection::conect()->prepare("UPDATE $table SET state = :state WHERE id = :id");

    $stmt->bindParam(":state", "OK", PDO::PARAM_STR);

    if($stmt -> execute()){

        return "ok";

    }else{

        return "error"; 

    }

    $stmt -> close();

    $stmt = null;

}
  

Когда я это делаю, я получаю следующую ошибку:

Неустранимая ошибка: Не удается передать параметр 2 по ссылке

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

1. Вы не привязали :id к своему значению.

2. @TobiasHH Не могли бы вы опубликовать, что вы должны сделать? У меня есть базовые знания. И попутно я даю вам правильный ответ, если он есть.

3. Просто посмотрите, что ответил scaisEdge 🙂 Если ваша переменная $id не является целым числом, измените PDO::PARAM_INT на PDO::PARAM_STR

Ответ №1:

 $stmt->bindParam(":state", "OK", PDO::PARAM_STR);
$stmt->bindParam(":id", $id, PDO::PARAM_INT);
  

и для передачи имени tale вам нужен динамический sql

 ("UPDATE " . $table . " SET state = :state WHERE id = :id");
  

Таким образом, вы подвергаетесь риску sqlinjection ..

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

1. Я сделал то, что вы мне сказали, но ошибка сохраняется. Более того, я определил переменную, которая поступает как $ id = 1, чтобы убедиться, что она работает с записью моей таблицы, и ошибка остается той же

2. ответ обновлен .. вы также используете php var для передачи имени объекта (имя таблицы) .. это опасно для sql inject..