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

PDO PHP从关联数组插入DB

顾正初
2023-03-14
问题内容

我有这样的数组

  $a = array( 'phone' => 111111111, 'image' => "sadasdasd43eadasdad" );

当我做一个var-dump时我得到这个->

 { ["phone"]=> int(111111111) ["image"]=> string(19) "sadasdasd43eadasdad" }

现在,我尝试使用IN语句将此添加到数据库中-

 $q = $DBH->prepare("INSERT INTO user :column_string VALUES :value_string");
 $q->bindParam(':column_string',implode(',',array_keys($a)));
 $q->bindParam(':value_string',implode(',',array_values($a)));
 $q->execute();

我遇到的问题是内爆返回一个字符串。但是“ phone”列是数据库中的整数,并且数组也将其存储为整数。因此,由于我的最终查询如下所示,因此出现了SQL错误-

INSERT INTO user 'phone,image' values '111111111,sadasdasd43eadasdad';

这是一个错误的查询。有没有解决的办法。

我的列名是动态的,基于用户要插入的内容。所以我不能使用诸如 :phone:image之
类的占位符,因为我可能并不总是获得这两列的值。请让我知道是否有解决方法。否则,我将必须为每种更新类型定义多个功能

谢谢。


问题答案:

上次检查时,无法准备一条语句,其中在准备时不知道受影响的列-但这似乎可行-也许您的数据库系统比我正在使用的数据库更宽容(主要是postgres)

implode()语句显然是错误的,因为每个变量都应由它自己处理,因此您还需要在insert语句中的字段列表周围加上括号。

要插入用户定义的字段,我认为您必须执行类似的操作(至少是我的操作方式);

$fields=array_keys($a); // here you have to trust your field names! 
$values=array_values($a);
$fieldlist=implode(',',$fields); 
$qs=str_repeat("?,",count($fields)-1);
$sql="insert into user($fieldlist) values(${qs}?)";
$q=$DBH->prepare($sql);
$q->execute($values);

如果您不能信任$ a中的字段名称,则必须执行以下操作

foreach($a as $f=>$v){
   if(validfield($f)){
      $fields[]=$f;
      $values[]=$v;
   }
}

其中validfields是您编写的用于测试每个字段名称并检查其是否有效的函数(通过创建关联数组$ valfields = array(’name’=>
1,’email’=> 1,’phone’= > 1 …然后检查$ valfields [$ f]的值,或者(如我所愿)通过从服务器获取字段名称来检查)



 类似资料:
  • SystemTap支持关联数组。关联数组就像其它编程语言中的map/dict/hash,你可以把它看作由互不相同的键所组成的数组,每个键都有一个关联的值。 关联数组需要定义为全局变量。访问关联数组的值的语法跟awk类似,就是array_name[index_expression]。 这里的array_name指关联数组的名字,index_expression指数组中某个唯一的键。比如在下面的例子中

  • 问题内容: 我已经看到了许多有关如何获取CSV文件然后创建带有标题作为键的关联数组的示例。 例如: 它会创建一个Array,如 这里将是品牌,型号,部件,测试。 因此,如果我想访问测试值“ 434”,则必须循环数组中的每个索引,然后忽略所有非本田品牌和任何非思域车型 我需要做的是最直接地访问值,而不是通过遍历每个$ num索引的for循环来运行。我希望能够通过以下方式访问值测试“ 434”: 或通

  • 关联数组的索引不一定是整数,并且可以稀疏填充。 关联数组的索引称为Key ,其类型称为KeyType 。 通过将KeyType放在数组声明的[]内来声明关联数组。 关联数组的一个简单示例如下所示。 import std.stdio; void main () { int[string] e; // associative array b of ints that are

  • 问题内容: 我想将bash中的关联数组转换为json hash / dict。我宁愿使用jq来执行此操作,因为它已经是一个依赖项,并且我可以依靠它来生成格式良好的json。有人可以演示如何实现这一目标吗? 问题答案: 有很多可能性,但是鉴于您已经编写了一个bash 循环,您可能希望从脚本的这种变体开始: 结果反映了bash 循环产生的键的顺序: 通常,基于馈送jq键值对的方法有很多值得推荐的方法,

  • 问题内容: 我正在使用jQuery将json对象发布到我的php应用程序中。 从firebug中提取的json字符串如下所示 在php中,我试图将其转换为关联数组。 到目前为止,我的PHP代码是 对ajax调用的响应应为“ about_us.php”,但返回空白。 问题答案: 您可以避免使用和: 和: 更新: …但是如果您真的想使用它们,则: 和:

  • 问题内容: 我有一个看起来像这样的PHP数组: 当我var_dump数组值我得到这个: 我想删除“ 已完成” 和“ 标记为垃圾邮件” 。我知道可以,但是问题是有时索引号可能会不同。 是否可以通过匹配值名称而不是键值来删除它们? 问题答案: 您的数组很奇怪: 为什么不只使用as索引,以及as …值? 如果这样声明数组,会不会容易得多: 那将允许您使用as 的值作为索引来访问数组。 而且您将能够使用函