php - PDO PHP从关联数组插入数据库

标签 php mysql database arrays pdo

我有一个这样的数组

  $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();

我遇到的问题是 implode 返回一个字符串。但是“电话”列是数据库中的整数,并且数组也将其存储为整数。因此我得到了 SQL 错误,因为我的最终查询看起来像这样--

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

这是一个错误的查询。有什么办法解决吗?

我的列名是动态的,基于用户想要插入的内容。所以我不能使用像 :phone:image 这样的占位符,因为我可能并不总是得到这两列的值。如果有办法解决这个问题,请告诉我。否则我将不得不为每种更新类型定义多个函数。

谢谢。

最佳答案

上次我检查时,无法准备在准备时受影响的列未知的语句 - 但那件事似乎有效 - 也许你的数据库系统比我使用的那些(主要是 postgres)更宽容

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

要插入用户定义的字段,我认为你必须这样做(至少我是这样做的);

$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 是您编写的一个函数,它测试每个字段名并检查它是否有效(通过创建关联数组 $valf​​ields=array('name'=>1,'email'=>1, ' phone'=>1 ... 然后检查 $valf​​ields[$f] 的值,或者(如我所愿)通过从服务器获取字段名称)

关于php - PDO PHP从关联数组插入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13507496/

相关文章:

php - 使用 jQuery 的 .get() 检索 PHP 数据

C#:DataTable 只获取一行搜索结果

mysql - 如何根据sql中最近的时间比较2条记录

mysql - Rails 无法识别 mysql 数据库的更改

mysql - 发票表设计

sql - 在sql查询中保存记录过滤条件

php - 这是一个PHP错误吗? (关于延伸)

php - 同时进行的交易会相互干扰吗? PHP/MySQL

php - iPhone OS 图像/照片大小调整工具可更改 EXIF 方向数据

php - COMMIT 后无法执行任何 MySQL 查询