$sth = $dbh->prepare('
UPDATE pinfo
SET friends=concat_ws(',' , friends, $friend)
WHERE nick = :mynick
');
Я переформатировал ваш запрос, чтобы, надеюсь, ошибка стала более очевидной.
Не видите?
Проверьте подсветку синтаксиса, предоставляемую SO. Видите, как запятая в SET
черная?
Проблема в том, что вы заключаете свой оператор SQL в одинарные кавычки, но хотите использовать внутри запроса одинарные кавычки. Что действительно происходит, так это то, что вы отбрасываете аргумент в кавычках, передаете PHP запятую, затем снова открываете кавычку, в результате чего два аргумента передаются prepare
: 'UPDATE pinfo SET friends=concat_ws('
, а затем ' , friends, $friend) WHERE nick = :mynick'
. Вот почему PHP жалуется на недопустимость второго аргумента. Вам нужно либо избежать одинарных кавычек, либо использовать двойные кавычки для переноса запроса.
Поэтому вам необходимо:
- Используйте здесь двойные кавычки, чтобы избежать побега (обратная косая черта может быть ужасно уродливой), и
- Привязывайте
$friend
правильно, а не позволяйте PHP интерполировать его, как отметил @Ian Wood, и, как изначально предлагал ваш закомментированный код
Таким образом:
$sth = $dbh->prepare("UPDATE pinfo SET friends=concat_ws(',' , friends, :friend) WHERE nick = :mynick");
$sth->bindParam(':mynick', $mynick);
$sth->bindParam(':friend', $friend);
$sth->execute();