使用php将关联数组插入mysql

时间:2013-11-04 19:53:31

标签: php mysql arrays

我有一个数据库,其中包含我刚刚使用以下信息创建的表格 表格:rec_nutr 的列: nutrDesc varchar(60), nutr_ttl浮动, 单位varchar(7), 我有一个名为$ stuff的php数组,我想在这个表中插入。当我print_r($ stuff)时,它看起来像:

Array
(
[0]=> Array
  (
    [nut]=> Protein
    [amt]=> 0.85
    [units]=> g
   )
[1]=> Array
  (
    [nut]=> Energy
    [amt]=> 717
    [units]=> kcal
   )
etc.
)

连接是一个名为$ db的PDO对象,这是我用于插入数组失败的众多不同变体之一

foreach ($stuff as $row){
  $nut = $row['nut'];
  $amt = $row['amt'];
  $units = $row['units'];
  $query= "insert into rec_nutr (nutrDesc, nutr_ttl,units)values ($nut,$amt,$units)"; 

  $statement= $db->exec($query);

} 

当我运行它时,我没有收到任何错误消息,但是信息没有插入表中。

我也尝试过使用这句话

  $stmt = $db->prepare("INSERT INTO rec_nutr(nutrDesc, nutr_ttl,units) VALUES ( ?, ?, ?)");
  foreach($stuff as $row) {
      $stmt->execute(array( $row['nut'],$row['amt'],$row['units']));
  }

但又没有运气

注意:使用JSON从网页中删除数组,然后使用JSON_decode进行解码。然后我使用print_r($ stuff)来检查数组。我尝试在amt上使用floatvar(),以防它以字符串形式出现,但似乎没有帮助。有什么我可以添加,以查看插入时是否有错误消息?

2 个答案:

答案 0 :(得分:0)

字符串值需要用引号括起来:

$query= "insert into rec_nutr (nutrDesc, nutr_ttl,units) values ('$nut',$amt,'$units')";

使用PDO,您应该查看prepared statements和绑定参数。它将确保正确输入您的值,并且可以很好地保护您免受sql注入。如果$stuff是不可信的输入,上面的代码很容易受到SQL注入。

答案 1 :(得分:0)

我刚刚意识到我只向我用来登录数据库的用户授予了SELECT权限!

感谢您的帮助。