Php/codeigniter/db
提供: 初心者エンジニアの簡易メモ
2024年11月10日 (日) 03:44時点におけるAdmin (トーク | 投稿記録)による版 (→"Message: syntax error, unexpected identifier"エラーが出る時)
目次
db自動接続
application/config/autoload.php
- $autoload['libraries'] = array(); + $autoload['libraries'] = array('database');
手動接続
以下でデフォルトのdbに接続
$this->load->database();
db設定
application/config/database.php
以下デフォルト設定
$db['default'] = array( 'dsn' => '', 'hostname' => 'localhost', 'username' => '', 'password' => '', 'database' => '', 'dbdriver' => 'mysqli', 'dbprefix' => '', 'pconnect' => FALSE, 'db_debug' => (ENVIRONMENT !== 'production'), 'cache_on' => FALSE, 'cachedir' => '', 'char_set' => 'utf8', 'dbcollat' => 'utf8_general_ci', 'swap_pre' => '', 'encrypt' => FALSE, 'compress' => FALSE, 'stricton' => FALSE, 'failover' => array(), 'save_queries' => TRUE );
PDOを使う場合は以下の通りdnsを設定する
'dsn' => 'mysql:host=localhost;dbname=mydatabase',
usernameと、passwordと、databaseを設定する。
'username' => '', 'password' => '', 'database' => '',
"No database selected"とエラーが出る場合
application/config/database.php
'database' => ,
が空になってないか確認する。
SQLの実行
参照
$this->db->query("select * from users");
挿入
$this->db->query("insert into users(code, name, age) values('taro', 'taro!', 10);"); $this->db->query("insert into users(code, name, age) values('jiro', 'jiro!', 8);");
削除
$this->db->query("delete from users where code ='jiro';");
使用したtable定義
drop table users; create table users( id int(11) unsigned NOT NULL AUTO_INCREMENT, code varchar(15), name varchar(15), age int(11) unsigned, PRIMARY KEY(id), UNIQUE KEY `code` (`code`) );
"Message: syntax error, unexpected identifier"エラーが出る時
SQL文字列を'(シングルクウォート)で囲むと、SQL文の'とかぶるので、SQLは"(ダブルクウォート)で囲む
SQLエスケープ処理
シングルクウォートを自動でつける
$sql = "INSERT INTO users (code) VALUES(".$this->db->escape($code).")";
検索時の対応は、シングルクウォートをつけられないので、escape_like_str()を使う
$sql = "SELECT * FROM users (code) LIKE '%" .".$this->db->escape_like_str($search)."%'";
SQLバインド
セキュリティを考慮するとSQLエスケープよりは、バインドを使うほうが良い。
$sql = "SELECT * FROM users WHERE id IN ? AND code = ? AND age = ?"; $this->db->query($sql, array(array(1, 6), 'taro', 10'));
エラー処理
if ( ! $this->db->simple_query('SELECT `code` FROM `users`')) { $error = $this->db->error(); }
公式
https://codeigniter.jp/user_guide/3/database/connecting.html