Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将数组插入数据库Yii_Php_Yii - Fatal编程技术网

Php 将数组插入数据库Yii

Php 将数组插入数据库Yii,php,yii,Php,Yii,我想在MYSQL数据库中插入一个数组,最好使用Yii的活动记录 例如,我有一个数组: User = array( fname => "Joe" lname => "Schmidt" ) 在我的数据库中使用id、fname和lname列的用户表。其中一个选项是创建对象并执行以下操作: $user = new User; $user->fname = User['fname']; $user->lname = User['lname']; $user->

我想在MYSQL数据库中插入一个数组,最好使用Yii的活动记录

例如,我有一个数组:

User = array(
    fname => "Joe"
    lname => "Schmidt"
)
在我的数据库中使用id、fname和lname列的用户表。其中一个选项是创建对象并执行以下操作:

$user = new User;
$user->fname = User['fname'];
$user->lname = User['lname'];
$user->save();

然而,这似乎是如此之多的代码用于这些通用功能。有没有一种方法可以在数据库中插入数组,使数组键与相应的列匹配,而无需编写自己的函数或进行SQL查询?理想情况下,它使用已经存在的Yii活动记录。

我以前从未使用过Yii,因此我无法提供使用该记录的解决方案,但您可以序列化阵列并将其存储在数据库中的单个单元格中,如下所示:

$user = array("fname" => "Joe", "lname" => "Schmidt");
$serialized = serialize($user);

//Store the $serialized variable in the database
当您准备好访问它时:

//Get your data from the database

$unserialized = unserialize($usersFromDB);
$fname = $unserialized['fname']; //Joe

希望有帮助。

功能非常简单,请尝试以下操作:

  function insert($table, $fields_values = array())
  {
    $q1 = join(",", array_keys($fields_values));

    $q2 = "'".join("','", array_values($fields_values))."'";

    $query = "INSERT INTO $table($q1) VALUES($q2)";

    // do your DB insert here
  }

主要技巧是使用连接键和数组键/数组值进行数组到查询的转换。

根据数组中的数据量,您可以编写自己的函数,例如

a) 选中此选项,将其修改为“插入/删除渲染视图”选项

b) 照此

c) 在插入多个记录时可能出现

d) 检查此关联项

如果你知道你在做什么很容易,你只需要照顾好自己

  • 验证
  • 关联表中存在记录(如果涉及FKey)
  • 备选方案d)。如果您有简单的插入(没有关联的表),这将是一个可能的答案

您想做的事情由框架本身处理

可以按如下方式分配体量:

$user->attributes=$_POST['User'];

阅读有关

的更多信息,您可以使用此批量分配:
$user=new user()$用户->属性=$data\u数组;如果(!$user->save()){print\r($user->errors,true);}
。将数组分配给
属性
属性将执行您想要的操作,但仅适用于那些为当前场景定义了验证规则的属性。@DCoder,这是我一直在寻找的一个很棒且简洁的解决方案!如果你把它作为一个答案,我会接受它。改为接受:)