0

こんにちはみんな私は「名前」フィールドを持つテーブル「アイテム」を持っています。データを挿入しようとしていますが、エラーが発生します。詳細については、以下のコードを参照してください。

item.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;
  }
}

}

index.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 に答える