「Php/codeigniter/db」の版間の差分
提供: 初心者エンジニアの簡易メモ
(→エラー処理) |
(→Select文の色々) |
||
行117: | 行117: | ||
$query = $this->db->query('select * from users;'); | $query = $this->db->query('select * from users;'); | ||
$row = $query->row(); // 最初の行を受け取る | $row = $query->row(); // 最初の行を受け取る | ||
+ | echo $row->id; | ||
+ | echo $row->code; | ||
+ | echo $row->name; | ||
+ | echo $row->age; | ||
</pre> | </pre> | ||
==公式== | ==公式== | ||
https://codeigniter.jp/user_guide/3/database/connecting.html | https://codeigniter.jp/user_guide/3/database/connecting.html |
2024年11月10日 (日) 04:09時点における版
目次
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の実行
参照
$query = $this->db->query('select * from users;'); foreach ($query->result() as $row) { echo $row->id; echo $row->code; echo $row->name; echo $row->age; }
挿入
$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(); }
Select文の色々
最初の行取得
$query = $this->db->query('select * from users;'); $row = $query->row(); // 最初の行を受け取る echo $row->id; echo $row->code; echo $row->name; echo $row->age;
公式
https://codeigniter.jp/user_guide/3/database/connecting.html