約 3,765,281 件
https://w.atwiki.jp/nicepaper/pages/74.html
前回記事phpでMySQLへフォームを使って挿入で挿入したものを呼び出します。6月3日記事 目次 クエリの条件 PDOのqueryメソッドとprepareメソッドの違い コード クエリの条件 公開日が現在の日付以下で、かつステータスが公開中(2)のものを最新5件取得するスクリプトを書いていきます。 間違ってはいけないのが、idで大きい順に公開中のものを取得してはいけないということです。 例えば、idで大きい順に公開中のものを5件取得すると id date status 略 いままでの日付一覧 2 10 2015-06-30 2 11 2015-06-12 2 12 2015-06-13 2 13 2015-06-14 2 14 2015-06-15 2 だった場合に、6月15日が最初に来ますが、次に6月14日、6月13日、6月12日、6月30日・・・。と6月30日の記事が後ろのほうにきてしまいます。やはり日付が大きい順に取得していく必要があります。 なのでクエリは mysql SELECT id,info_date,title FROM information WHERE info_date = 今日の日付 AND status = 2 ORDER BY info_date DESC LIMIT 5; とする必要があると思います。 意味 SELECT 選ぶ id,info_date,titleというカラム名を取得 FROM information informationというテーブルから取得 WHERE info_date = 日付 AND status = 2 日付が今日以下でかつ、公開中のもの ORDER BY info_date DESC 日付順序を逆順に(新しいものを前に) LIMIT 5 5件取得 PDOのqueryメソッドとprepareメソッドの違い まずは簡単な違いから。queryメソッド=固定化されたquery。ユーザの入力が一切ないようなタイプのクエリはこちらを使います。prepareメソッド=変数を扱ったもの。ユーザの入力の内容をエスケープ処理していくようなものはこちらを使っていきます。こちらはbindParamやbindValueを使い、ユーザによって入力されたものが適切な値かどうかチェックしていく機能があります。 コード ファイル名(index.php) !DOCTYPE HTML html lang="ja" head meta charset="utf-8" title トップページの更新情報取得作成 /title /head body a href="register.php" 新規投稿 /a br ?php $dsn = mysql dbname=データベース名;host=localhost;port=3306 ; $user = ユーザ名 ; $password = ユーザパスワード ; echo dl ; try{ //成功時対応 $dbh = new PDO($dsn, $user, $password); $sql = "SELECT id,info_date,title FROM information WHERE info_date = ".date( Y-m-d )." and status = 2 ORDER BY info_date DESC LIMIT 5"; $stmt = $dbh- query($sql); $ct = 0; while($result = $stmt- fetch(PDO FETCH_ASSOC)){ echo dt .htmlspecialchars($result[ info_date ]). /dt ; echo dd a href="information.php?id= .htmlspecialchars($result[ id ]). " .htmlspecialchars($result[ title ]). /a /dd ; $ct++; } if($ct == 0){echo dt /dt dd 更新情報はありません。 /dd ;} echo /dl ; }catch (PDOException $e){//失敗時対応 print( Connection failed .$e- getMessage()); die(); } $dbh = null; ? /body /html というように記述すれば、データが取得できます。 次にPHPとMySQLを使いGETメソッドで受け取ったデータを取得&表示を書いていきます。
https://w.atwiki.jp/hitoshop/pages/29.html
データベース接続PDO編 PDOを使用したPHPからmysqlの接続 extension=php_pdo_dll を使用できるように、php.iniファイルを修正する必要がある データベースの抽象化で、急なサーバ変更時(mysql→postgreSqlなど)に大きくソース修正の必要無し PEAR DBなど他にもDB抽象化レイヤーはあるが、それらに比べて処理速度が早い 基本的なフォーマット ?php $dsn = mysql dbname=testDB;host localhost ; //testDBは任意 $user = root ; //DB接続ユーザ名 $password = ; //DB接続用パスワード try{ $db = new PDO($dsn, $user, $password); $db- setAttribute(PDO ATTR_ERRMODE, PDO ERRMODE_EXCEPTION); print( 接続成功 . br / ); $sql = select * from db ; foreach ($db- query($sql) as $value){ print($value[ id ] . br / ); print($value[ name ] . br / ); } }catch(PDOException $e){ print( Error . $e- getMessage()); die(); } $db = NULL; ? PDOExceptionクラスの主なメソッド メソッド 概要 getFile() 例外が発生したファイル名を取得 getLine() 例外が発生した行番号を取得 getCode() エラーコードを取得 getMessage() 例外メッセージを取得 getTraceAsString() バックトレースを文字列として取得 getAttribute / setAttribute メソッドで参照/設定可能な接続パラメータ 定数 概要 PDO ATTR_AUTOCOMMIT オートコミットを有効化(0 | 1) PDO ATTR_TIMEOUT タイムアウト値 PDO ATTR_ERRMODE エラーモード PDO ERRMODE_SILENT エラー出力を行わない PDO ERRMODE_WARNING 警告を出力 PDO ERRMODE_EXCEPTION PDOExceptionを発生 PDO ATTR_SERVER_VERSION サーバのバージョン PDO ATTR_CLIENT_VERSION クライアントのバージョン PDO ATTR_SERVER_INFO サーバ情報 PDO ATTR_CONNECTION_STATUS サーバへの接続状態 PDO ATTR_CASE カラム名を大文字/小文字に変換 PDO CASE_LOWER カラム名を小文字に変換 PDO CASE_NATURAL ドライバからの戻り値のまま PDO CASE_UPPER カラム名を大文字に変換 PDO ATTR_CURSOR_NAME カーソル名 PDO ATTR_ORACLE_NULLS 空文字をNULLに変換するか(0 | 1) PDO ATTR_PERSISTENT 接続的持続を有効にするか insert処理サンプル insert_form.php html head title メンバー登録 /title /head body form method="post" action="insMember.php" talbe border="0" tr th 名前 /th td input trype="text" name="name" size="15" maxlength="50" / /td /tr tr th 住所 /th td input trype="text" name="address" size="35" maxlength="170" / /td /tr tr th 電話番号 /th td input trype="text" name="tel" size="20" maxlength="20" / /td /tr tr th E-mail /th td input trype="text" name="mail" size="50" maxlength="100" / /td /tr tr td colspan="2" input type="submit" value="登録" / input type="reset" value="クリア" / /td /tr /table /form /body /html insMember.php ?php $dsn = mysql dbname=testDB;host localhost ; //testDBは任意 $user = root ; //DB接続ユーザ名 $password = ; //DB接続用パスワード try{ $db = new PDO($dsn, $user, $password); $db- setAttribute(PDO ATTR_ERRMODE, PDO ERRMODE_EXCEPTION); $db- exec("INSERT INTO memberDB(name, address, tel, mail) VALUES(" . $db- quote($_POST[ name ]) . "," . $db- quote($_POST[ address ]) . "," . $db- quote($_POST[ tel ]) . "," . $db- quote($_POST[ mail ]) . ")"); header( Location http // . $_SERVER[ HTTP_HOST ] . dirname($_SERVER[ PHP_SELF ]) . /insert_form.php ); } catch (PDOException $e){ print( エラー発生 . $e- getMessage()); } ? 名前付きパラメータ◆ここで、insMember.phpで別の方法でインサート処理しましょう ◆quoteメソッドによる処理を行う必要がなくコードをシンプルに記述できる insMember.php ?php $dsn = mysql dbname=testDB;host localhost ; //testDBは任意 $user = root ; //DB接続ユーザ名 $password = ; //DB接続用パスワード try{ $db = new PDO($dsn, $user, $password); $db- setAttribute(PDO ATTR_ERRMODE, PDO ERRMODE_EXCEPTION); $stt = $db- prepare( INSERT INTO memberDB(name, address, tel, mail) VALUES( name, address, tel, mail ) ); $stt- bindParam( name , $_POST[ name ], PDO PARAM_STR, 50); $stt- bindParam( address , $_POST[ address ], PDO PARAM_STR, 150); $stt- bindParam( tel , $_POST[ tel ], PDO PARAM_STR, 20); $stt- bindParam( mail , $_POST[ mail ], PDO PARAM_STR, 100); $stt- execute(); header( Location http // . $_SERVER[ HTTP_HOST ] . dirname($_SERVER[ PHP_SELF ]) . /insert_form.php ); } catch (PDOException $e){ print( エラー発生 . $e- getMessage()); } ? bindParamメソッドで指定できるデータ型 設定値 概要 PDO PARAM_NULL NULL型 PDO PARAM_INT 整数型 PDO PARAM_STR 文字列型 PDO PARAM_LOB オージオブジェクト型 PDO PARAM_STMT SQLクエリ PDO PARAM_INPUT_OUTPUT 入出力パラメータ
https://w.atwiki.jp/bithouse/pages/22.html
?php define( SMARTY_DIR , /home/be-bee/smarty/ ); require_once( SMARTY_DIR . Smarty.class.php ); // Smartyオブジェクト取得 function getSmartyObj() { static $smarty = null; if( is_null( $smarty ) ){ $smarty = new Smarty(); $smarty- template_dir = /home/be-bee/www/worker/smarty/templates/ ; $smarty- compile_dir = /home/be-bee/www/worker/smarty/templates_c/ ; $smarty- config_dir = /home/be-bee/www/worker/smarty/configs/ ; $smarty- cache_dir = /home/be-bee/www/worker/smarty/cache/ ; } return $smarty; } ?
https://w.atwiki.jp/yasrun/pages/34.html
ユーザやDBの作成など DOS窓+mysqlコマンドで、日本語がINSERT/UPDATEできない PHPからの実行で文字化け 消えないテーブルがある… 読み方 主キーにしてるのにAUTO_INCREMENTできない! DBがUTF-8だとWindowsのコマンドプロンプトで文字化けする~;; 日本語をINSERTしたら文字化けした! rootのパスワードを忘れてしまった! UTF8で書いたINSERT文SQLファイルを実行したら文字化け ストレージエンジンの確認と変更 ★
https://w.atwiki.jp/inuko/pages/12.html
本家サイト(SUNに吸収された模様) http //www.mysql.com/ ユーザの追加 localからアクセスする"inuko"さんを追加パスワードは"inuko_pass" grant all on *.* to inuko@localhost identified by inuko _pass; 繋ぐ時は %$mysql_home%\bin\mysql -u inuko -p Enter password **********
https://w.atwiki.jp/c-note/pages/14.html
MySQL オープンソースなデータベース、MySQLに関するページ。 MySQLは、オープンソースながら、多くの企業でも採用されている実績のあるデータベースです。 ダウンロード インストール 環境変数の設定 データベースのログオン/ログオフ データベースの作成/削除 ユーザーの作成/削除/権限の変更 別のPCからの接続 MySQL Workbenchの接続設定 テーブルの作成(テキスト編) テーブルの作成(ファイル編) テーブルの削除
https://w.atwiki.jp/ma-100140/pages/12.html
sjisでの文字化けを回避するための方法 MySQLの設定 下記のような状態になるように設定する。 MySQLとconnectした後にset names sjis;を発行する。 mysql SHOW VARIABLES LIKE character\_set\_% ; +--------------------------+--------+ | Variable_name | Value | +--------------------------+--------+ | character_set_client | cp932 | | character_set_connection | cp932 | | character_set_database | cp932 | | character_set_filesystem | binary | | character_set_results | cp932 | | character_set_server | cp932 | | character_set_system | utf8 | +--------------------------+-------- 7 rows in set (0.00 sec) ● システム変数の用途 character_set_system "indentifiers" (テーブル名とかカラム名?) を格納するのに使われる。 utf8で 固定。 character_set_server character_set_database のデフォルト値に影響する。 character_set_database CREATE DATABASE で文字コードが指定されなかった場合、database の文字コー ドはこれになる。 character_set_connection の値に影響する character_set_client クライアントから渡された SQL 文はこの文字コードであると解釈される。 character_set_connection キャラクタセットイントロデューサ (例えば『_ujis ほげ 』)が省略された SQL 文中の文字列リテラルはこの文字コードであると解釈される。 character_set_results サーバーがクライアントに返す結果をこの文字コードに変換する。 この変数を NULL にセットすると、結果に対する文字コード変換をしないよ うにできる。 Linux での mysql.cnfの設定 win用と同じ設定にしてもうまくいかなっかった。グローバル値は上記のようになったが、セッション値はujisになった。よって自動変換をしないようにskipしたら直った。 null の演算 Accessの場合はNz()関数 MySQLではcoalesce() 関数は、最初の null でないデータを返す。 coalesce($変数,0) select coalesce(null, abc , def ); +------------------------------+ | coalesce(null, abc , def ) | +------------------------------+ | abc | +------------------------------+ 別名での定義(レスポンスに差があるのか) 別名を使用したとき select seisank_ns.katasikic from seisank_ns inner join (select seisank_nsh.katasikic from seisank_nsh) as H on seisank_ns.katasikic = H.katasikic id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY ALL 507 1 PRIMARY seisank_ns index alt2 58 4340 Using where; Using index 2 DERIVED seisank_nsh index atl1 58 507 Using index 使用しなかったとき select seisank_ns.katasikic from seisank_ns inner join seisank_nsh on seisank_ns.katasikic = seisank_nsh.katasikic id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE seisank_nsh index atl1 58 507 Using index 1 SIMPLE seisank_ns index alt2 58 4340 Using where; Using index やっぱり、副問い合わせの分が余分にかかっている。 2つのカラムでLike句を使う 2つのテーブル顧客住所と住所があります。 顧客ID 住所1 住所2 1 北海道 札幌市手稲区○○ 2 北海道 旭川市△■ 住所ID 市区町村名 文字数 1 札幌市手稲区 6 2 旭川市 3 住所テーブルを使って、顧客テーブルの住所1の北海道(都道府県)を市区町村に置き換えます。 Accessでは UPDATE 顧客, 住所 SET 顧客.住所1 = 住所!市区町村名, 顧客.住所2 = Right([住所2],Len([住所2])-住所!文字数) WHERE (((顧客.住所2) Like [住所]![市区町村名] "*")); MySQLでは UPDATE 顧客, 住所 SET 顧客.住所1 = 住所!市区町村名, 顧客.住所2 = Right(住所2,CHAR_LENGTH(住所2-住所.文字数) WHERE (((顧客.住所2) Like concat(住所.市区町村名, % ) )); ポイントは文字列の連結にconcatを使うことと、文字列の長さを求めるのにCHAR_LENGTHを使うこと SQLServerではうまく行きませんでした。直積の書き方が違うみたい。「UPDATE 顧客, 住所」のところでエラーが出る。 結果は 顧客ID 住所1 住所2 1 札幌市手稲区 ○○ 2 旭川市 △■ nonプログラミングでこんな処理ができます。SQLは便利だ。 ODBCドライバーのエラー [MySQL][ODBC 3.51 Driver]Lost connection to MySQL server at reading initial communication packet , system error 0 新しいPCにODBCドライバーをインストールしましたが、上記エラーで繋がりません?何でだろう? このページを読むと http //stackoverflow.com/questions/961928/could-not-connect-lost-connection-to-mysql-server-at-reading-initial-communica やはりセキュリティの関係のようでした。MySQLが動いているLinuxサーバーのhosts関係に新しくつなぐPCを登録して事なきを得ました。
https://w.atwiki.jp/fieds_labo1/pages/27.html
smarty 変数 1.phpからの{assign} $smarty- assign( foo , Even smarter ); テンプレート内では {$foo} で参照。 変数名と、値はstring 基本構文
https://w.atwiki.jp/seasartaro/pages/19.html
MySQLの自習結果のメモを主に載せています。 ちなみにIKURAさんという方のMySQLサイトで勉強しました。 便利なので是非参照してください。 また、GoogleでMySQL関係のキーワードで検索すると、公式HPが検索結果に出ることが多々あります。 公式HPだと構えがちですが、割と平易に書かれており便利なので、こちらもよく参照しました。 後、本ですが、MySQL5逆引き大全のみ購入しました。
https://w.atwiki.jp/fattencho/pages/24.html
Mysql MyISAMとinnodb違い http //tsuttayo.jpn.org/mysql/innodb/ http //linux.mini13i.com/?MySQL%2F%BA%C7%C5%AC%B2%BD%2F%A5%B5%A1%BC%A5%D0%A5%D1%A5%E9%A5%E1%A5%BF MyISAM inodb