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

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

最后是文章的结论部分。

#1楼 票数:2 已采纳

PHP 爆破将列名数组转换为逗号分隔的字符串。 它对INSERT语句中的值执行相同的操作。

$ sets作为列名/值对的关联数组开始。 这个说法:

list($sets, $cols, $values) = escape_arr($sets);

将$ sets变量重新分配为包含诸如“ column_name ='value'”之类的字符串的常规数组。 它使用本文中的帮助器函数escape_arr进行此操作,该函数返回3个数组。 如果不确定该怎么做,请查看文档列表

然后,它再次使用implode函数构建$sets数组的一个大逗号分隔的字符串。 如此有效地,它在给定一个关联数组的情况下构建INSERT和UPDATE语句,该数组包含列名作为键,以及它们的值以及...值。

那是问题吗? 您可以在代码中插入一些var_dump语句,以遵循其在每个步骤中所做的事情。

编辑:抱歉为混乱的解释,但我现在必须运行:)

#2楼 票数:2

附带说明一下,在MySQL中,INSERT可以使用UPDATE语法:

INSERT [INTO] tbl
    SET col1 = 'value', col2 = 'value', col3 = 'value', ...

有关完整的文档,请参阅MySQL INSERT语法

#3楼 票数:1

那没有任何意义。 他建议对查询进行硬编码,因为这样一来,您可以避免将其视为对象(WTF?),然后继续告诉您硬编码是不好的,显然没有意识到这正是他在做什么。 也。 WHERE userid=$userid LIMIT 1是不好的编码习惯,省略引号可能会导致SQL注入。 以及为什么LIMIT 1? 他使用的是非唯一的用户ID?

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

  ask by Kevin translate from so

未解决问题?本站智能推荐:

2回复

语法问题UPDATE有效,但不能插入

我有一个下拉列表,其中选择了默认值。 如果有值,则if语句允许更新数据。 如果没有值,那么将插入整行。 如果我将第三个值硬编码为1,则它可以工作。但是,当我将其设置为$category_of_taxom1 ,插入将不起作用。 该更新工作正常,因此,如果我在数据库中手动创建记录,则可以通过
1回复

MySql中REPLACE,INSERT,UPDATE有什么区别? [关闭]

有人可以在MySql中解释REPLACE,INSERT和UPDATE之间的区别吗?
1回复

插入MySQL“重复键更新”语法错误

我正在尝试从PHP Webform向MySQL数据库插入新项目。 如果插入重复的行,则将结果更新为错误消息。 这是我的代码。 它一直给我一个语法错误。 错误:无法执行您的SQL语法有误;请执行以下操作: 检查与您的MySQL服务器版本相对应的手册,以在第3行“无效的优惠券代码
3回复

IF EXISTS UPDATE ELSE INSERT语法错误

我在我的ISP上使用MySQL 5.1。 这是我的查询 错误是 我的实际任务涉及到 但是我已经减少了它以使我的问题解决更简单 在我对此的搜索中,我一直看到“ON DUPLICATE KEY UPDATE”的引用,但不知道如何处理它。
1回复

使用 CASE 在重复更新时插入的 MariaDB 语法

我想对设备进行指纹识别,并将结果与​​ MariaDb 中的会话 ID 一起存储。 我正在用 PHP 编写,使用 PDO 驱动程序。 我在访问的页面上生成一个打印客户端,并将 XHR 发布到 storePrint.php 我想更新现有记录或插入一个新记录,如果它们不存在。 下面是源代码的一个片段。
2回复

正确的语法(如果不存在则插入)或更新(如果存在)SQL

我需要推动才能进行IF EXIST UPDATE,否则需要执行INSERT,以下是我更新数据库的函数: 如何声明要插入的值?
2回复

MySQL和MSSQL中用于IF INSERT ELSE UPDATE的通用语法

我有一个PHP 7.3项目,该项目通过PDO连接到MySQL数据库或MSSQL数据库,具体取决于在Linux或Windows上运行。 如果该表中还没有唯一值,我想在表中插入一个新值。 如果它已经在表中,我想更新非唯一值。 我也搜索了许多文档和SO帖子,但是我找不到一种语法,该语法可
1回复

PHP和MYSQL这个MySQL语法是否正确用于UPDATE / INSERT IF EXISTS

我的计划是从外部更新/插入现有/新记录到数据库,我有信息设置进入数据库,但无法检查它是否已存在。 我第一次尝试做数据库的东西 每行完成时都会生成一个唯一的ID。