Я полностью в тупике. Вот мой код php (CodeIgniter):
function mod()
{
$uid = $this->session->userdata('uid');
$pid = $this->input->post('pid');
if ($this->_verify($uid,$pid))
{
$name = $this->input->post('name');
$price = $this->input->post('price');
$curr = $this->input->post('curr');
$url = $this->input->post('url');
$query = $this->db->query("UPDATE items SET
name=".$this->db->escape($name).",
price=".$this->db->escape($price).",
currency=".$this->db->escape($curr),",
url=".$this->db->escape($url)."
WHERE pid=".$this->db->escape($pid)." LIMIT 1");
}
header('location: '.$this->session->userdata('current'));
}
Цель этого кода - изменить свойства (имя, цена, валюта, URL) строки в таблице «items» (первичный ключ - pid
). Однако, по какой-то причине, разрешив запуск этой функции один раз, можно изменить имя, цену, валюту и URL-адрес ВСЕХ записей в таблице, независимо от их pid и значения LIMIT 1, которое я добавил в конец запроса. Как будто последняя строка запроса полностью игнорируется.
Как будто это не было достаточно странно, я заменил "$query = $this->db->query(
" на "echo
", чтобы увидеть, как выполняется SQL-запрос, и он выдает запрос, очень похожий на то, что я ожидал:
UPDATE items
SET name = 'newname',
price = 'newprice',
currency = 'newcurrency',
url = 'newurl'
WHERE pid = '10'
LIMIT 1
Копирование-вставка этого в окно MySQL действует именно так, как я хочу: оно изменяет строку с выбранным pid.
Что здесь происходит ???