Posted by hattara on 2009 年 3 月 27 日 – 8:22 PM
Filed under MySQL, SQL
Tagged as MySQL, SQL
PHP&MySQLでSQLを書いてたときに、
“The used SELECT statements have a different number of columns”
みたいなエラーがでました。
グーグル先生に聞いたところ、MySQL本家サイトにも記述がありました。
理由としては、
UNIONを利用していて、片方だけにしか特定のカラムがない場合にでるようです。
出力カラムの数を数えるのと、カラム名を確認してみたらいいんじゃないでしょうか。
僕は単純にカラム数(column)がたりませんでした。
注意力が足りなくて、スミマメーン!
Posted by hattara on 2009 年 3 月 26 日 – 10:07 PM
Filed under php
Tagged as php
phpで
“Cannot use a scalar value as an array”
が表示されて処理ができなかったときのお話です。
グーグル先生に質問をしてみたところ、
配列を初期化している部分に問題があるのがわかりました。
たとえば、
// 初期化
$test['abc'] = ”;
// 配列に値を入れる
$test['abc']['aaa'] = aaaa;
こんなことしたときにエラーになりました。
要するに、$test['abc']はスカラー変数なのに、$test['abc']['aaa']のように
配列に値をいれようとしてるよ!
という警告のようです。
ということで、初期化している部分をコメントアウトして対処しました。
多分初歩的な内容なんだろうな。。
Posted by hattara on 2009 年 3 月 9 日 – 9:06 PM
.htaccessでmod_rewriteを使って転送してるつもりが、
404エラーになってしまう。
Apacheのエラーログ(error_log)では、「File does not exist:」が
でてる状態なわけです。
こんな現象とちょっと戯れたので、メモしとく。
.htaccessの内容は以下。
## リライトエンジンを有効に。
RewriteEngine On
## リライトの対象パスを指定
RewriteBase /
## リライトルールを宣言(条件・アクセス先)
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php
まあ、これで普通はmod_rewriteによって、該当領域にきたアクセスで
RewriteRuleで指定されている画像など以外のものは、
すべてindex.phpにアクセスされるようになるはずなんですね。
ここで大きな落とし穴がありました。
.htaccessの書き方が問題なくても、
そもそも.htaccessを有効にしてない場合があるわけです。
Apacheのhttpd.confに「AllowOverride」って項目があるわけです。
これが「None」とかになってると、.htaccessが利用できないです。
これは、サーバ管理者にお願いする形になっちゃうんでしょうけど、
修正するしかないですね。
ZendFrameworkのおすすめ書籍
Posted by hattara on 2009 年 1 月 15 日 – 1:43 PM
Filed under perl, php, python, シェルスクリプト
Tagged as プログラミング, 危険
ウェブの世界を徘徊してたら、見かけました。
海外の有名な人たちが、危険なプログラミング25を発表したようですね。
ぱっと見だと、
・入力された値のVaidation
・出力するもののエンコードとエスケープ処理
・SQLインジェクション
・クロスサイトスクリプティング
・OSコマンド系のインジェクション
:
なんてあたりのが25項目書いてるみたいっすね。
ちょっと時間ができたら、見返してみようとおもってます。
もし、お時間がある方はみといたら、どうでしょう。(英語です)
http://www.sans.org/top25errors/?utm_source=web&utm_medium=text-ad&utm_content=Announcement_Bar_20090111&utm_campaign=Top25&ref=37029#s4
Posted by hattara on 2008 年 12 月 3 日 – 6:47 PM
Filed under MySQL, php
Tagged as MySQL, php
PhpでMysql(innodb)を利用している場合に、
すごくはずかしい失態をおかしたので、
繰り返さないように、恥を公開しておこう。
autoCommit(false);
としてたわけですよ。
で、id を auto_increment するようなテーブルが複数あり、
それらを、insertとかしてたわけですよ。
でも、なぜかDBが更新されないわけですよ。
mysql_insert_id();
の関数を利用して直前のSQLのauto_incrementのIDを引っ張るわけですが、
これが、ちゃんとに取得できるわけですよ。
id が 100とかなってても、100のIDのレコードがテーブルに存在しないわけです。
もう全然わからないと思っていたところ、
commit()
部分を気持ちよく、綺麗さっぱりコメントアウトしてたわけです。
そりゃー 動くわけないですがな。
中途半端にまともなIDなんて返してくれちゃうから、
余計あせっちまいましたよ。
と、いったところで、自分のinnodbの扱いの認識不足と、
注意力不足が招いた結果ですけどね。。
Posted by hattara on 2008 年 12 月 2 日 – 9:01 PM
久しぶりというのもあって、初歩的なミスをおかしました。
Qmailをインストールして、ユーザを作成して(/usr/sbin/useradd)、
メール配信のテストをしたわけですが、
エラーになって、リターンメールが来て、配信できないわけです。
届かないわけですよ。
【リターンメールの内容】
failure: Sorry,_no_mailbox_here_by_that_name._(#5.1.1)/
で、.qmailを設置して動作確認しても、.qmailすら動いてないわけです。
ここで、原因と考えられる候補を絞っていったわけですが、
・該当ユーザのホームディレクトリのパーミッション(755)問題なし。
・/etc/rc.d/init.d/qmail の中身問題なし。
・/var/qmail/rc の中身問題なし。
と、ここまでくると、残りは、以下のようなあたりですかね。
・/etc/passwd に入っているアカウント情報に不備がある
・/var/qmail/controlの中にあるファイルに不備がある。
でも、/etc/passwdの中身は問題なさそうに見えました。
最後の砦である/var/qmail/controlに的を絞ります。
/var/qmail/control/defaultdomain : 該当サーバのホスト名
/var/qmail/control/locals : 該当サーバのホスト名
/var/qmail/control/me : 該当サーバのホスト名
/var/qmail/control/rcpthosts : localhost
/var/qmail/control/morercpthosts : 該当サーバのホスト名
/var/qmail/control/virtualdomains : 該当サーバのホスト名:所有者名
ここで、何度かみても気づかなかったんですが、localsがいけてないようです!!
virtualdomainsに記載するドメインは、localsには記載してはいけない!! ようです。
なぜかというと、virtualdomainsよりlocalsの方が優先されるからだそうです。
ブランクとは恐ろしいっす。。。
Posted by hattara on 2008 年 11 月 25 日 – 8:44 PM
Filed under PC
Tagged as パソコン, 不具合, 復旧
LinuxとかPhpとか関係ないんだけども、
先週末、メインで利用している自作デスクトップPC(自宅サーバじゃなくて)が
何も表示されなくなって、起動しないという事態に陥ったわけです。
うちのメインPCの簡単なスペックは
CPU : Intel Pentium4 3GHz位
M/B : Gigabyte GA-965G-DS3だったか?
Memory : 1GB x 2枚
Disk : 350GBくらいだったかしら。。。
拡張G/B: A OpenのGeForce(nVIDIA)??というやつ
電源をOnすると、電源はブイィ~~ンといい音してる訳なんですが、
画面には、信号だかシグナルだかがこないというわけです。
要するに、モニターが真っ黒な画面のままなんです。
BIOSの画面すら来ないわけですよ。
これには本気で焦りまして、
・電源のOffとOnを繰り返す
・主電源を切ってみる。
・電源ケーブルをはずしてみる
と静電気まわりを疑うわけですが、解決せず。
次におもったのは、ハード障害の可能性。
通電するけど、画面がでないので、マザーボードか、CPUかMemoryか。
と考えたわけです。
で、1GB * 2 のメモリの片方をはずしてみたりして、動作確認しても
動かないわけです。
こうなってくると、CPUかマザーボードかという話になってきたわけです。
で、もう復旧を諦めて、データだけ使おうと思い立ち、
電気屋に外付けディスクケース(3.5inch)のを探しにいきましたよ。
予算的に千円以内じゃないと買えません。
結局千円じゃ買えるはずもなく、断念。
家に帰ってきて、ネットをあさってると怪しいやつがいるじゃないですか!!
あとから増設したグラフィックボードさんですよ!!
論理的には全然わからないけど、グラフィックボードが悪さをした場合に、
マザーボード側のグラフィックでも表示できなくなる現象があると知りましたよ!
で、はずしてみたら、動くじゃありませんか!!
ということで、グラフィックボードの原因でモニターが
うんともすんとも言わなくなってましたとさ。
Posted by hattara on 2008 年 11 月 20 日 – 6:30 PM
Filed under MySQL
Tagged as column, MySQL, table
久しぶりのエントリになりましたが、
最近多様するんだけど、覚えるほどでもないので、
メモとして残しておくことに。
SSHのターミナルとかから
mysql -h [host_name] -u [user_name] -p [database_name]
とかで接続している場合に、データが1件もないテーブルに向けて、
以下のように select をしても、0件という状態しかわからない。
select * from [table_name]
こんなときに、そのtableの中に、なんという名前のカラム(column?)があって
どういう型(intとかvarcharとか)になっているのかってのを
知りたいなって思うことありませんか??
僕はあります。
でも、AccessとかCSEで接続すると重いので、
DB操作系は、なるべくターミナルからやりたいわけですよ。
そんなときに活躍するのが、
show fields from [table_name];
これはいいですね。
これで、そのテーブルにどんなカラムがあって、
どんな型になっているか、まるわかりです。
MySQLのおすすめ書籍
Posted by hattara on 2008 年 11 月 5 日 – 7:58 PM
よく.htaccessを使うわけだけども、その都度書き方をググるわけです。
面倒なんで、メモで残しておきます。
まず、特定ホストからのみアクセスを許可するなら、
order deny,allow
deny from all
allow from 192.168.0.100
allow from 192.168.0.200
みたいな感じにすれば、OKですね。
次に、mod_rewriteで転送する場合ですが、アクセスホスト名毎に
内容を分岐する(VirtualHostとか使ってない場合?)とか、
コンテンツ内容によって変更する場合には、以下のような書き方でいけますね。
## シンボリックリンクを有効に(場合によって不要かも)
Options FollowSymLinks
## リライトのエンジンを有効に。
RewriteEngine on
## サイト名A宛でtest.phpでもtest/フォルダでもなければmainフォルダに転送
RewriteCond %{HTTP_HOST} a.com
RewriteCond %{REQUEST_URI} !(^/test\.php)
RewriteCond %{REQUEST_URI} !(^/test/)
RewriteRule ^(.*)$ /main/ [R]
## サイトB宛で/aaa/abc.php宛のものを defフォルダに転送
RewriteCond %{HTTP_HOST} b.com
RewriteCond %{REQUEST_URI} (^/aaa/abc.php)
RewriteRule ^(.*)$ /def/ [R]
というような感じでできますね。
あとは、これをもとの修正をいれてあげればいい感じ。
条件とか不要な場合には、Redirectを使えばいいですね。
Posted by hattara on 2008 年 11 月 4 日 – 10:06 PM
まあ、前提として、ActionScriptは使ったこともないわけですけど、
ActionScriptとPhpの連係についてはまったので、メモっときます。
そもそもActionScriptでエスケープ処理の類をした場合なんですが、
通常Phpとかだと「\」バックスラッシュ的なものがエスケープ文字なんですが、
ActionScriptだと、「%」パーセント的なものがエスケープ文字みたいなんです。
で、英数字と一部の記号以外は、全部%がつくみたいなんですが、
そもそもエスケープしようと思ってなかった場合に、
Php側から渡された文字列中に「%」があったら、動かないとか、
文字化けするとかって現象がでちゃうわけですよ。
というのを、今日はまって、知ったのでメモした次第です。