当前位置: 首页 > 面试题库 >

在存在的列上插入表

尹英华
2023-03-14
问题内容

假设我为用户提供了大量信息:

$user=array(
"name"=>"john",
"ip"=>"xx.xx.xx.xx",
"email"=>"john@something.com",
//lots more values
)

我们还假设此信息需要 放入多个表中 。例如username需要进入表usersaddress需要进入details表,等等。

现在,我使用一个自制函数将与 数组键和列名 匹配的 数组键 和与 要输入的值 匹配的 数组值
插入到我的表中。类似于以下内容:

function insert_sql($table, arr $values){
    GLOBAL $dbc;
    $sql="INSERT INTO `$table` (".implode(array_keys($values), ", ").") VALUES (".implode(array_values($values), ", ").")";
    $dbc->prepare($sql)->execute();
    return $dbc->lastInsertId();

}
//I don't actually use this function, just trying to show you what is being accomplished.

问题是我的函数使用了 所有键所有值 ,因此当我只需要将数组的某些部分放入多个表中时,它将无法工作。

问题是:

如果该列不存在,如何使INSERT语句忽略该列?
所以,如果我插入nameemailaddress,成表users,但这个表没有地址栏,我需要它插入的名称和电子邮件行,但简单地忽略一个事实,即在地址栏是不存在的。

编辑:另一个选项是使与表的列的数组,并使用它来筛选值数组。尽管我不确定如何设置。


问题答案:

查找给定的表列名称:

SELECT 
column_name
FROM 
information_schema.columns
WHERE 
table_name =  'tablename'

然后只需将$values阵列中的密钥列入白名单

例子:

function insert_sql($table, array $values){
        global $connection;
        $query = "SELECT column_name FROM information_schema.columns WHERE table_name =  :tablename";
        /* @var $stmt PDOStatement */
        $stmt  = $connection->prepare($query);
        $stmt->execute(array(
            'tablename' => $table
        ));
        $columns = array_flip($stmt->fetchAll(PDO::FETCH_COLUMN, 0));
        $values  = array_intersect_key($values, $columns);
        var_dump($values);
    }


 类似资料:
  • 问题内容: 我尝试插入新用户(如果用户表中不存在该用户),我尝试了此查询,但收到错误: 如果不存在,如何插入用户? 错误: 谢谢, 问题答案: 用途: 我可以这样写: 但是更好的方法可能只是放入一个唯一索引,以便数据库保护数据:

  • 我有一个我认为是完全琐碎的查询-插入值到一个表中,如果一个值与匹配的ID不存在: 我在where语句周围得到一个错误。为什么?我如何实现我的目标?

  • 问题内容: 我有一个列的表。现在,我需要在和列之间添加一个新列。如何在两列之间添加新列? 问题答案: 您有两个选择。首先,您可以简单地添加带有以下内容的新列: 其次,更复杂的是,实际上会将列放在所需的位置,这将是重命名表: 然后使用缺少的列创建新表: 并用旧数据填充它: 然后删除旧表: 我更喜欢第二个选项,因为它可以让您在需要时完全重命名所有内容。

  • 因此,我对数据结构很陌生,我在对数组进行排序时,在尝试了几天之后,我偶然发现了双链表的插入排序。我仍然无法理解排序有什么问题,是的,我已经在线检查过,我不能只插入排序,我需要对函数参数中传递的列表进行排序,它的名称是internationSort(Dlinkedlist-arr)。 ` ` 我尝试实现它,但我被困住了,因为处理数组的逻辑有点不同,因为我们正在使用 next 和 prev 指针,这使

  • 问题内容: 是否有只查询记录的查询,如果不存在,则插入?我不想重复更新或替换。寻找一个查询解决方案,寻找其他答案,但不是我真正想要的。 表: 伪查询: 问题答案: 使用-与INSERT完全相同,不同之处在于,如果表中的旧行与PRIMARY KEY或UNIQUE索引的新行具有相同的值,则在插入新行之前会删除该旧行。 http://dev.mysql.com/doc/refman/5.0/en/rep

  • 本文向大家介绍将数据插入MySQL中已经存在的表的新列中?,包括了将数据插入MySQL中已经存在的表的新列中?的使用技巧和注意事项,需要的朋友参考一下 让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 这是添加列的查询- 以下是将数据插入到现有表的新列中的查询- 让我们再次检查表记录- 这将产生以下输出-