「MySQL」カテゴリーアーカイブ

PDO+MySQL カラム名一覧を取得する


PDOでカラム一覧(フィールド名・列名)を取得する方法のメモ。

カラム名だけを取得するのではなくレコードを取得する時に一緒に取ってきたかったのでこんな感じにしました。

$recs = $pdo->fetchAll(PDO::FETCH_ASSOC);
$keys = array_keys($recs[0]);

foreach($keys as $key){
    $th .= ‘<th>’.$key.'</th>’;
}

[PHP5]PDOのfetchAllでフィールド名がキーの配列を取得 – Develog –

カラム名だけ、あるいはカラム情報を取得するなら以下のSQL文で一覧が取得できます。

DESCRIBE テーブル名;    OR    show columns from テーブル名;

MySQLでカラム一覧を取得 – Qiita 

Mysqlが起動しない(エラー1067)


さっきまで動いていたのにPCを再起動したら突然使えなくなっていました。

c:\xampp\mysql\data\mysql_error.logでエラーログを見てみると、

[ERROR] InnoDB: Attempted to open a previously opened tablespace.
InnoDB: Error: could not open single-table tablespace file .\***.ibd
InnoDB: We do not continue the crash recovery, because the table may become

こんなような記述がありました。

とりあえず該当する***.ibdファイルを移動してMysqlを起動したらあっさり起動してくれました。ファイルが壊れていたのかもしれません。ネットを見るとパーミッションの問題とかいう情報もありました。

とりあえずビールください。:MySQLが起動しない。エラーコード1067。 

SQLSTATE[HY093]: Invalid parameter number


PDOのprepare()でデータベースにInsertしようとしたら表題のエラーが発生。

phpmyadminのほうで新しくカラムを追加していたのにInsert文に入れてなかったのとプレースホルダを''で括っていたのが間違いだったようです。

#1062 – Duplicate entry for key ‘PRIMARY’


phpMyAdminでは表題のエラー、Firebugには「Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064」というエラーが発生しました。

よくあるケースとしてプライマリキーが設定してあるフィールドに重複した値が入ったレコードをInsertした場合このエラーが出るのですが、私の場合Updateなのにこれが出て悩みました。

原因はwhere以降が抜けてしまっていたからでした。

× update `tbl` set ***
○ update `tbl` set *** where id = 1

where以降はif文で入れていたんですが、PHP7になり関数を変えたらオブジェクト型ではなく配列型になってしまいif文に引っかからなくてwhere以降が空になってました。