0

大家好,我有一个“名称”字段的表“项目”。我正在尝试插入数据,但出现错误。请参阅我的以下代码以获取更多信息。

项目.php

class Item {

public function create(){
  $attributes = $this->attributes();
  $pair = array();

  foreach($attributes as $key => $value){
    $pair[] = "'{$key}'=>{$value}";
  }

  $bind = ":" . implode(", :",array_keys($attributes));
  $sql = "INSERT INTO " . static::$table_name
       . " (" . join(",",array_keys($attributes)) . " ) VALUES "
       . " ( " . $bind . " )";

  $stmt = $this->database->prepare($sql);
  $result = $stmt->execute($pair);
  if($result){
    return $result;
  } else {
    $error = $this->database->errorInfo();
  return $error;
  }
}

}

索引.php

<?php
   $item->name = "Sample Name";
   $item->create();
?>

错误:

Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in PATH on line 62
4

2 回答 2

1

您的$pair数组如下所示:

array(
    0 => "'foo'=>bar"
    1 => ...
)

这是胡说八道。该execute()方法需要一个带有命名键的数组,而不是带有垃圾值的数字键。完全摆脱$pair事物并$attributes转而代execute()之。

于 2012-11-20T09:24:50.883 回答
1

$pair部分错误...您应该查看PDOStatement::executeArrays手册。

您的$pair数组如下所示:

array(1) {
  [0]=>
  string(12) "'key'=>value"
}

但应该是:

array(1) {
  [":key"]=>
  string(5) "value"
}

自己找到解决方案:)

于 2012-11-20T09:25:22.043 回答