UPDATE和INSERT语法上的差异是不方便的

时间:2010-05-08 17:47:25

标签: php

我今天正在阅读这篇文章。

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″;

最后是文章的结论部分。

3 个答案:

答案 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语句,给定了一个包含列名作为键的关联数组,以及它们的值以及......值。

那是个问题吗?您可以在代码中插入一些var_dump语句,以跟踪它在每一步中的操作。

编辑:对于凌乱的解释感到抱歉,但我现在要跑了:)

答案 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?

有很多更安全的数据库层分离解决方案,例如数据访问对象,对象关系映射,活动记录......