Запрос UPDATE не исполняется !!!

tarweb

Новичок
Решил перейти на PDO
Но, простейший запрос не исполняется

PHP:
  $style = 'bla';
    $sql  = $db->prepare ( " UPDATE someTable SET name=:name WHERE name=:name " );
    $sql->bindValue('name',  $style);
    $sql->bindValue('name', 'default');
    $sql->execute();
    $result = $sql->rowCount(PDO::FETCH_NUM);
$result равен нулю ???
Ошибок не выдает.
Поле с таким именем (name) и значением (default) строки - в базе существуют.
Из консоли phpMyAdmin подобный запрос исполняется без проблем.

Может есть еще какие-то приколы с PDO, подскажите, пожалуйста.
Спасибо.
 

tarweb

Новичок
Да, я писал - Поле с таким именем (name) и значением (default) строки - в базе существуют.
 
Последнее редактирование:

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
А зачем два одинаковых плейсхолдера?
 

tarweb

Новичок
object(PDOStatement)#2 (1) {
["queryString"]=>
string(91) "UPDATE Table SET name=:name WHERE name=:name "
}
 

tarweb

Новичок
А зачем два одинаковых плейсхолдера?
Это, что-бы было понятно
У меня записывается с оберткой например так:
PHP:
$db->query ( "UPDATE $db_blocks SET name_template=:name_template WHERE name_template=:name_template ",
$data=array('name_template' => 'default', 'name_template' => $style ),$count);
 

tarweb

Новичок
Короче - если имя поля SET совпадает с именем поля WHERE - то НЕ исполняется ???
А вот так:
PHP:
    $style = 'bla';
    $sql  = $db->prepare ( " UPDATE someTable SET name=:name WHERE id=:id " );
    $sql->bindValue('name',  $style);
    $sql->bindValue('id', 1);
    $sql->execute();
    $result = $sql->rowCount(PDO::FETCH_NUM);
ИСПОЛНЯЕТСЯ !!!
 
Последнее редактирование:

tarweb

Новичок
Я уже думаю - может у меня где-то ошибка в драйвере PDO Денвера
Или тупой PDO не понимает одинаковые названия биндов - тогда надо
вызывать еще сначала SELECT и выбирать все id где name='default'
А потом через массив делать UPDATE name
 
Последнее редактирование:

tarweb

Новичок
Решено, надо так:

PHP:
  $style = 'bla';
    $sql  = $db->prepare ( " UPDATE someTable SET name=:name_1  WHERE  name=:name_2 " );
    $sql->bindValue('name_1',  $style);
    $sql->bindValue('name_2', 'default');
    $sql->execute();
    $result = $sql->rowCount(PDO::FETCH_NUM);
 

Вурдалак

Продвинутый новичок

tarweb

Новичок
Я спрашивал про bindValue и UPDATE а не про массивЫ в PHP
У меня сотни подобных запросов и все работают
Например:
PHP:
$ss = $db->query  ( "SELECT link FROM $db_page WHERE name=:name OR link=:link OR link=:link OR link=:link ",
$data = array('name' => $bad,
              'link' => $check_name,
              'link' => $check_namee,
              'link' => $name_anons ),
              $result );
P.S. Повторю еще раз - тупой, если в данном случае не выбрасывает никакой ошибки
 
Последнее редактирование:

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
tarweb, я вот не понимаю, зачем убеждать нас, что все работает, если вот сейчас все сфейлилось и ты признался нам, что дело было в том, что я тебе и сказал?
 

tarweb

Новичок
Спасибо, c0dex

Я просто не понял сразу, что Вы имели ввиду
И почему разные правила названий биндов для SELECT и UPDATE
 

riff

Новичок
Поразительно:
У меня сотни подобных запросов и все работают
$data = array('name' => $bad,'link' => $check_name,'link' => $check_namee,'link' => $name_anons ),
В то время как массивы это почти первое, с чем сталкиваешься, начиная изучая php.
И за всё время ни разу не заглянуть в debugger... поразительно.
 

Redjik

Джедай-мастер
riff, что ты имеешь ввиду под debugger?
вполне хватает display_errors и error_reporting, чтобы все ошибки падали на страницу при отладке...

если ты имеешь ввиду профилирование - то это редко нужно, нет ничего странного если человек не сталкивался.
 

riff

Новичок
Под "debugger" я понимаю ZendDebugger/xdebug. Ну да, возможно сейчас его упоминание не совсем в тему, хотя он в тему всегда.
Больше поразило незнание поведения одного из основных инструментов (array).
 
Сверху