facebook twitter hatena line email

「Php/codeigniter/db」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(SQLエスケープ処理)
(SQLの実行)
行56: 行56:
  
 
参照
 
参照
$this->db->query("select * from users");
+
<pre>
 +
$query = $this->db->query('select * from users;');
 +
foreach ($query->result_array() as $row)
 +
{
 +
        echo $row['id'];
 +
        echo $row['code'];
 +
        echo $row['name'];
 +
        echo $row['age'];
 +
}
 +
</pre>
  
 
挿入
 
挿入

2024年11月10日 (日) 03:55時点における版

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_array() 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();
}

公式

https://codeigniter.jp/user_guide/3/database/connecting.html