mysql


DreamHostでmysqlの文字化け対策

DreamHost にてデータベースの情報を mysql で取り出すと日本語が????と文字化けする。

文字化け対策としてデータベース接続時に文字コードを指定する。

----------------------------------------------------
$link = mysql_connect($hostname,$username,$password);

mysql_select_db($database) or die("Unable to select database");

mysql_query('SET NAMES utf8', $link); ←これを追記
//mysql_set_charset('utf8'); ←もしくはこれ
----------------------------------------------------

SET NAMES には脆弱性あるので mysql_set_charset を使うのがいいよう。

もしくは my.conf で文字コードを指定する。

【PHP】DreamHostでmysqlの接続

DreamHostでPHPを使ってmysqlデータベースへ接続する方法のメモ。

//mysqlの接続
///////////////////////////////////////////////
$hostname = ""; // mysql.example.com (「mysql.」 + 「独自ドメイン」)
$username = ""; // データベースを設定したときに決めたユーザ名
$password = ""; // データベースを設定したときに決めたパスワード
$database = ""; // 接続するデータベース名

$link = mysql_connect($hostname,$username,$password);
mysql_select_db($database) or die("Unable to select database");
mysql_query('SET NAMES utf8', $link); //←文字化け対策
//mysql_set_charset('utf8'); //←もしくはこれ
///////////////////////////////////////////////

//出力の例
///////////////////////////////////////////////
$sql = "SELECT * FROM table_name";

$result = mysql_query($sql,$link) or die("Unable to select: ".mysql_error());

while($datas = mysql_fetch_assoc($result)) {

echo $datas['column_name'] . "
";

}
///////////////////////////////////////////////

//mysqlの切断
///////////////////////////////////////////////
mysql_close($link);
///////////////////////////////////////////////

DreamHostのmysqlのdatabaseへのアクセスの仕方

ブラウザからアクセスしてphpmyadminへ
--------------------------------------

http://mysql.独自ドメイン/

(http://mysql.example.com/)
--------------------------------------

またはターミナルでサーバーにアクセスしてコマンドライン
--------------------------------------
$ mysql -u データベースユーザー名 -p -h データベースホスト名
--------------------------------------

【mysql】カンマ区切りの文字列から上手にデータを抽出する【FIND_IN_SET】

カンマ区切りの文字列から上手にデータを抽出には「FIND_IN_SET」を使う。

たとえばあるカラムにカンマ区切りのデータが入っていたとする。

---------------------------------
はくさい,しいたけ,にんじん
---------------------------------

この場合こう書く。

SELECT * FROM table WHERE FIND_IN_SET('しいたけ', カラム名);

FIND_IN_SET は、結合条件(ON 句のうしろ)にも使える。

【さくら共有】mysqlサーバーに突然アクセスできなくなった件

さくら共有サーバーのmysqlサーバーに突然アクセスできなくなったときの覚書。

サイトにアクセスしても突然つながらなくなった。

「Servece Temporarily Unavailable」と出る
mysql_error1

ページを更新させると違うエラーが出る
mysql_error2

どうもmysqlサーバーにつながってないよう。

phpmyadminへのログインを試みる。
mysql_error3

ログインできない。エラー番号は1040。

SSHからmysqlサーバーにログインしてみる。
mysql_error4

「Too many connections」のエラー。ようはmysqlサーバーへのアクセスが多すぎらしい。

これを解消するためにいろいろ試みた。
mysql_error5

動作しているプロセスを終了してみるが、改善されず。

結局2時間後、つながるようになった。時間が解決してくれた。

さくら共有サーバーで使えるmysqlコマンドの一覧

さくら共有サーバーで使えるmysqlコマンドの一覧は次のとおり。
mysqlモニターにログインしなくても(ログイン前に)つかえるもの。

MySQL5系 MySQL4系
mysql mysql-4.0
mysqldump mysqldump-4.0
mysqlimport mysqlimport-4.0
mysqlshow mysqlshow-4.0
mysql_config mysql_config-4.0

上記だけなので、mysqladminなどは使えない。

実行するとこうなる
------------------------------
mysqladmin: Command not found.
------------------------------

ソース

【mysql】さくら共有サーバーのmy.cnfの場所

my.cnfは、mysqlの設定ファイル。

SSHでサーバーにログイン(mysqlモニターにはログインしない)して、以下のコマンドを実行すれば確認できる。

「mysql --help」

もしくは、

「mysql --help | grep my.cnf」

helpに書かれている次のパスが、my.cnfのあるところ。
mycnf1

実際には「/usr/local/mysql/5.5/etc」にあった。

以下の記述があった。

-------------------------------
[mysql]
default-character-set=ujis
[mysqldump]
default-character-set=ujis
[mysqlimport]
default-character-set=ujis
[mysqlshow]
default-character-set=ujis
-------------------------------

これは、サーバーにログイン後(mysqlモニターにはログインしない)に使えるコマンド。
mysqladminなどはないので、実行しても使えない。

-------------------------------------------
mysqladmin -u username -h hostname -p
-------------------------------------------

↓ ↓ ↓

-------------------------------------------
mysqladmin: Command not found.
-------------------------------------------

【PHP】expects parameter 1 to be resource, boolean givenの意味

PHPにてmysql_fetch_assocを実行したところエラーが出た

エラー内容
-------------------------------------------------------
Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in /home/username/www/test.php on line 183
-------------------------------------------------------

日本語訳
-------------------------------------------------------
「mysql_fetch_assoc()」は、パラメータ1がリソース型(データベース操作をして取り出した値)であると期待したが、boolean値(falseのこと)が与えられた。test.phpの183行目において。
-------------------------------------------------------

ようは、queryの実行に失敗していて、データベースの値は取り出せず、falseになっているということ。

・リソース →ファイル接続、データベース接続 などを通して使用する PHP 外の情報資源。

・expect A to do ~ → Aが~するのを期待する。

【mysql】ORDER BYの順番でレコードに連番を振る方法

ORDER BYの順番でレコードに連番を振るクエリは以下の通り。

-----------------------------------------------------
SET @i := 0;
UPDATE テーブル名 SET column2 = (@i := @i +1) ORDER BY column1 ASC;
-----------------------------------------------------
ORDER BY 以下の条件で、column2フィールドのレコードに連番を振られる。

他のPCからxamppをインストールしたPCのmysqlに接続する

他のPCからODBC接続でxamppをインストールしたPCのmysqlに接続を試みた際、Mysql Connecterのテスト接続でエラーが発生した。

エラー内容
----------------------------------------------------------------
Host 'xxx.xxx.xxx.xxx' is not allowed to connect to this MySQL server
----------------------------------------------------------------

xamppの初期設定では、localhostからの接続だけが許可されているのでエラーになる。
他のPCから接続するには、接続の権限を持ったユーザー作る必要がある。

「mysql」という名前のデータベースに「user」という名前のテーブルがあるので、そこに新しいユーザーを加える。

書式
----------------------------------------------------------------
GRANT ALL PRIVILEGES ON 有効範囲(データベース名.テーブル名) TO ユーザー名@ホスト名 IDENTIFIED BY 'パスワード'
----------------------------------------------------------------
PRIVILEGES は、省略可。

実際のコマンド
----------------------------------------------------------------
GRANT ALL PRIVILEGES ON *.* TO testuser@'%' IDENTIFIED BY 'test'
----------------------------------------------------------------

GRANT構文については、こちら1こちら2

上のコマンドだと、以下の設定をしたことになる。
----------------------------
・ユーザー名:testuser
・パスワード:test
・ホスト名(@以降):ワイルドカード(%)← これでlocalhost以外からもアクセス可能になる。もし「localhost」と記述すれば、他のPCからはアクセスできない。
・all privileges は、「(GRANT権限以外の)すべての権限を与える」
・*.* は、「すべてのデータベースのすべてのテーブルに有効」という意味。
----------------------------

これでうまくいった。

他のPCからページが見れない場合は、こちら

参考ページ:こちら1こちら2