#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..