Более короткая версия:
import проверить def f1 (): f2 () def f2 (): print 'имя вызывающего абонента:', inspect.stack () [1] [3] f1 ()
(благодаря @Alex и Stefaan Lippen )
Вы назначаете $pro
команде prepare, а не execute.
Сказав, что если вы используете mysql, вы можете использовать синтаксис insert... on duplicate key update
.
insert into $table (field, value) values (:name, :value) on duplicate key update value=:value2
Вы не можете использовать один и тот же связанный параметр дважды, но вы можете установить два связанных параметра в одно и то же значение.
Изменить: этот синтаксис mysql будет работать только , где (первичный или другой уникальный) присутствует и приведет к сбою вставки.
try,
PDO::exec()
возвращает 1, если вставлено. 2, если строка обновлена.
для подготовленных операторов,
PDOStatement::execute()
Вы можете попробовать,
PDOStement::rowCount()
Если это mysql-only, вы можете попробовать INSERT INTO ... ON DUPLICATE KEY UPDATE
http://dev.mysql.com/doc/refman/5.0/en/insert- на duplicate.html
Сначала вам нужно выполнить его.
Кроме того, это издевательский способ сделать это. Было бы лучше начать транзакцию, сделать SELECT, а затем определить, что делать (INSERT или UPDATE). Просто проверить, не удалось ли выполнить запрос UPDATE, это не удается, если ни одна строка не найдена.
SELECT
- довольно изворотливый способ сделать это тоже. Лучше было бы иметь уникальный ключ на поле, а затем использовать INSERT ... ON DUPLICATE KEY UPDATE ...
.
– cHao
5 September 2012 в 15:32
field
да? – Fluffeh 5 September 2012 в 15:45