フォームフィールドをMySQLテーブルに挿入するために使用される挿入クエリ(アクティブレコードスタイル)があります。私は私のクエリの戻り値として挿入操作のための最後の自動インクリメントIDを取得したいのですが、私はそれにいくつかの問題があります。
コントローラ内部:
function add_post(){
$post_data = array(
'id' => '',
'user_id' => '11330',
'content' => $this->input->post('poster_textarea'),
'date_time' => date("Y-m-d H:i:s"),
'status' => '1'
);
return $this->blog_model->add_post($post_data);
}
そして内部モデル:
function add_post($post_data){
$this->db->trans_start();
$this->db->insert('posts',$post_data);
$this->db->trans_complete();
return $this->db->insert_id();
}
モデル内のadd_postの戻り値として何も得られない
これを試して
function add_post($post_data){
$this->db->insert('posts', $post_data);
$insert_id = $this->db->insert_id();
return $insert_id;
}
複数のインサートの場合はあなたが使用することができます
$this->db->trans_start();
$this->db->trans_complete();
ここではトランザクションは必要ありません。これで十分です。
function add_post($post_data) {
$this->db->insert('posts',$post_data);
return $this->db->insert_id();
}
$id = $this->db->insert_id();
$ this-> db-> insert_id()
データベース挿入を実行するときの挿入ID番号。
したがって、このようなものを使うことができます。
$lastid = $this->db->insert_id();
このトピックを完成させるために:主キーと自動インクリメントを使ってテーブルを設定する場合は、IDを手動でインクリメントするプロセスを省略することができます。
この例をチェックしてください
if (!$CI->db->table_exists(db_prefix() . 'my_table_name')) {
$CI->db->query('CREATE TABLE `' . db_prefix() . "my_table_name` (
`serviceid` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
`name` varchar(64) NOT NULL,
`hash` varchar(32) NOT NULL,
`url` varchar(120) NOT NULL,
`datecreated` datetime NOT NULL,
`active` tinyint(1) NOT NULL DEFAULT '1'
) ENGINE=InnoDB DEFAULT CHARSET=" . $CI->db->char_set . ';');
これで行を挿入できます
$this->db->insert(db_prefix(). 'my_table_name', [
'name' => $data['name'],
'hash' => app_generate_hash(),
'url' => $data['url'],
'datecreated' => date('Y-m-d H:i:s'),
'active' => $data['active']
]);
あなたはそうデータの挿入を介してトランザクションを開始したので、最初のトランザクションが完了したかどうかを確認します。トランザクションを開始したら、トランザクションのステータスに従ってコミットまたはロールバックする必要があります。
function add_post($post_data){
$this->db->trans_begin()
$this->db->insert('posts',$post_data);
$this->db->trans_complete();
if ($this->db->trans_status() === FALSE){
$this->db->trans_rollback();
return 0;
}else{
$this->db->trans_commit();
return $this->db->insert_id();
}
}``
上記では、あなたがタイムスタンプを取得したとしても、成功したトランザクションのデータをコミットしました。