0

我有一个数据库,其中包含我刚刚使用以下信息表创建的 :rec_nutr 列: nutrDesc varchar(60)、nutr_ttl float、units 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() 以防它以字符串形式出现,但这似乎没有帮助。我可以添加一些内容以查看插入时是否有错误消息?

4

2 回答 2

0

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

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

使用 PDO,您应该查看准备好的语句和绑定参数。它将确保您的值输入正确,并在保护您免受 sql 注入方面做得很好。$stuff如果输入不受信任,上述代码很容易受到 SQL 注入的影响。

于 2013-11-04T19:59:16.747 回答
0

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

谢谢你的帮助。

于 2013-11-04T20:38:18.897 回答