Специальные символы в pdo

При попытке обновить мои значения выдается следующая ошибка: SQLSTATE [HY093]: недопустимый номер параметра: параметр не был определен.
Это происходит только со специальными символами, например: (привет;), а не с (привет)
По какой-то причине он не может найти значения со специальными символами, и я могу только вставить их
и не обновлять и не удалять его из моей базы данных.

И база данных уже установлена ​​на utf8.

public function update($data, $key, $value) {
try {

$this->query = 'UPDATE ' . $this->table . ' SET ';

array_walk($data, function($index, $key) {
$this->query .= $key . ' = ' . ':' . $key . ', ';
});

$this->query = rtrim($this->query, " ,");

$this->query .= " WHERE $key = :$value";

$stmt = $this->db->prepare($this->query);

$stmt->execute(array_merge($data, array($value => $value)));

return true;

} catch(PDOException $e) {
echo $e->getMessage();
}
}

Пример того, как я это использую:

if(isset($oldValue, $newValue)) {
$data['database']->update(array("name" => $newValue), "name", $oldValue);
}

Массив должен давать ключ и новое значение для обновления, а после запятой искать значение в таблице «имя».

Если кто-то знает решение для этого, я был бы очень рад, спасибо заранее.

0

Решение

Вы параметризуете частично, и это хорошо, но вы, вероятно, должны быть параметризация от корки до корки. Чтобы продемонстрировать более наглядно, давайте предположим, что мы звоним update(array("occupation" => "poet"), "name", "Horace") с $this->table установлен в "persons", Затем мы будем составлять этот SQL:

UPDATE persons SET occupation = :occupation WHERE name = : Horace

Затем мы выполнили бы его со следующими значениями параметров:

occupation => poet
:Horace => Horace

occupation = :occupation часть отличная и правильная; но name = : Horace а также :Horace => Horace неправильно. Вместо этого вам, вероятно, следует составить такой запрос:

UPDATE persons SET occupation = :occupation WHERE name = :name

И эти значения параметров:

occupation => poet
name => Horace

Если у вас есть случай, когда вы называете это как update(array("occupation" => "unemployed"), "occupation", "poet")Однако у вас могут возникнуть некоторые проблемы, так как вам нужно иметь два разных параметра для occupation (один старый, один новый), и вы будете звонить обоим occupation, Один победит другого, и ваш UPDATE не будет ничего делать Так что вам придется разобраться с этим делом, но в остальном все должно быть достаточно просто.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]