有没有办法执行“INSERT...ON DUPLICATE KEY UPDATE”操作? 在 Zend Framework 1.5 中?
我想在 Zend Framework 1.5 中使用 ON DUPLICATE KEY UPDATE
,这可能吗?
例子
INSERT INTO sometable (...)
VALUES (...)
ON DUPLICATE KEY UPDATE ...
I would like to use ON DUPLICATE KEY UPDATE
in Zend Framework 1.5, is this possible?
Example
INSERT INTO sometable (...)
VALUES (...)
ON DUPLICATE KEY UPDATE ...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
我在 Zend 工作,特别是在 Zend_Db 上工作了很多。
否,
ON DUPLICATE KEY UPDATE
语法不支持 API。 对于这种情况,您必须简单地使用query()
并自行形成完整的 SQL 语句。我不建议将值插入到 SQL 中,如 harvejs 所示。 使用查询参数。
编辑:您可以使用
VALUES()
表达式避免重复参数。I worked for Zend and specifically worked on Zend_Db quite a bit.
No, there is no API support for the
ON DUPLICATE KEY UPDATE
syntax. For this case, you must simply usequery()
and form the complete SQL statement yourself.I do not recommend interpolating values into the SQL as harvejs shows. Use query parameters.
Edit: You can avoid repeating the parameters by using
VALUES()
expressions.作为侧边栏,您可以使用
VALUES()
简化ON DUPLICATE KEY UPDATE
子句并减少脚本需要执行的处理量:请参阅 http://dev.mysql.com/doc/refman/5.1/en /insert-on-duplicate.html 了解更多信息。
As a sidebar, you can simplify the
ON DUPLICATE KEY UPDATE
clause and reduce the amount of processing your script needs to do by usingVALUES()
:See http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html for more information.
@Bill Karwin:很好的解决方案! 但如果使用命名占位符(“:id”,“:col1”,...)而不是问题符号,效果会更好。 您不需要通过 array_marge 复制值。 此外,如果使用“INSERT”的“SET”语法而不是“VALUES”,则可以更简单地为任何字段集自动生成代码。
@Bill Karwin: great solutions! But it would be greater if to use named placeholders (":id", ":col1", …) instead of questions signs. Than you wouldn’n need to duplicate values by array_marge. Also if to use "SET" syntax of "INSERT" instead of "VALUES", the code gets simplier to be generated automatically for any set of fields.
用法:
例如。 Model_Db_Contractors.php
IndexController.php
USAGE:
eg. Model_Db_Contractors.php
IndexController.php
改用它:
如果存在则更新,如果不存在则插入。 这是标准 mysql api 的一部分。
Use this instead:
This will update if exists or just insert if not. This is a part of the standard mysql api.
更新 Pawel 的答案以支持单独插入和更新数据,并且还支持 Zend Db 表达式
Update to Pawel's Answer to support separate insert and update data, and also supports Zend Db Expressions
你可以简单地做这样的事情:
在你的id上设置唯一索引
,然后
you can simply do something like this:
set unique index on your id
and then