我今天正在阅读这篇文章。
http://vinothbabu.com/2010/05/08/update-and-insert-differences-in-syntax-is-an-inconvenience/
我无法理解作者编写的这部分代码。
list($sets,$cols,$values)=escape_arr($sets);
$insert_sql=”INSERT INTO `avatars` “.implode(’,',$cols).”
VALUES(”.implode(’,',$values).”)”;
$update_sql=”UPDATE `avatars` SET “.implode(’,',$sets).”
WHERE userid=$userid LIMIT 1″;
最后是文章的结论部分。
答案 0 :(得分:2)
PHP implode将列名数组转换为逗号分隔的字符串。它对INSERT语句中的值执行相同的操作。
$ sets以列名/值对的关联数组开始。这句话:
list($sets, $cols, $values) = escape_arr($sets);
将$ sets变量重新分配为包含“column_name ='value'”等字符串的常规数组。它使用文章中的辅助函数escape_arr执行此操作,该函数返回3个数组。如果您不确定它的作用,请查看list的文档。
然后它再次使用implode
函数构建一个逗号分隔的$sets
数组的大字符串。因此,它有效地构建了INSERT和UPDATE语句,给定了一个包含列名作为键的关联数组,以及它们的值以及......值。
编辑:对于凌乱的解释感到抱歉,但我现在要跑了:)
答案 1 :(得分:2)
另外,在MySQL INSERT中可以使用UPDATE语法:
INSERT [INTO] tbl
SET col1 = 'value', col2 = 'value', col3 = 'value', ...
有关完整文档,请参阅MySQL INSERT syntax。
答案 2 :(得分:1)
这没有任何意义。他建议对你的查询进行硬编码,因为这样你可以避免将它们视为对象(WTF?)然后继续说硬编码很糟糕,显然没有意识到这正是他正在做的事情。也。 WHERE userid=$userid LIMIT 1
是错误的编码实践,省略引号可能导致SQL注入。为什么LIMIT 1?他正在使用非唯一的用户ID?
有很多更安全的数据库层分离解决方案,例如数据访问对象,对象关系映射,活动记录......