6

親子関係のあるデータベースがあります。最初に親テーブルに挿入してから、子テーブルにデータを挿入するために使用する ID を取得する必要があります。

以下は、データベースに挿入するために使用しているコードのスニペットです。PDO クラスを使用するのはこれが初めてです。私が得ているエラー; 未定義のプロパティ:非オブジェクト database::$db でメンバ関数 lastInsertId() を呼び出します私はPHPにかなり慣れていないことを認めなければなりません。ありがとうございました


{

    public function __construct($DB_TYPE, $DB_HOST, $DB_NAME, $DB_USER, $DB_PASS)
    {
        parent::__construct($DB_TYPE.':host='.$DB_HOST.';dbname='.$DB_NAME, $DB_USER, $DB_PASS);
}

$this->db = new database(DB_TYPE, DB_HOST, DB_NAME, DB_USER, DB_PASS);

    $this->db->insert('images', array(
        'image_userID' => $data['image_userID'],
        'image_date' => $data['image_date']
    ));

/**
 * insert
 * @param string $table A name of table to insert into
 * @param string $data An associative array
 */
public function insert($table, $data)
{
    $fieldNames = implode('`, `', array_keys($data));
    $fieldValues = ':' . implode(', :', array_keys($data));

    $sth = $this->prepare("INSERT INTO $table (`$fieldNames`) VALUES ($fieldValues)");

    foreach ($data as $key => $value) {
        $sth->bindValue(":$key", $value);
    }

    $sth->execute();

$result= $this->db->lastInsertId();
 return $result;
}
4

1 に答える 1

7

最後の挿入 ID は、データベース ハンドルからではなく、アクティブなステートメントから取得されます。したがって、コードの最後の行を次のように変更します。

$return = $sth->lastInsertId();
于 2012-09-26T06:51:19.857 に答える