mysql ヘルプ!
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001名無しさん@お腹いっぱい。
02/01/22 16:08ID:kMbsTQE3状況を詳しく書きます
PHPが動くプロバイダーのディレクトリにおいた自分の家の
mysqlサーバを操作するPHPに
$db = mysql_connect("mysqlサーバのip:3306","ゆーざ","ぱす");
と書いたのですが、駄目でした。
どうすればいいのでしょうか?
0870nobodyさん
05/02/04 00:35:52ID:FzOGXEjc0872質問です
05/02/11 01:47:17ID:bxpVru70もちろん、select文で表示はできるのですが、
show tables;
では見れないですよね?
そもそもメモリ上にあるテンポラリテーブルは見れない仕様なのでしょうか?
0873nobodyさん
05/02/18 01:17:47ID:oRUItyUuあるカラムをインクリメントして、その値を取得することは可能でしょうか?
0874sage
05/02/24 23:50:55ID:MSi8NK1Eロックの権限の確認方法はどうすればできますか?
0875nobodyさん
05/02/25 20:01:28ID:QqsT661L本日 RedHut9にMysql4.1.10をrpmでインストールしました。
現在STATUSを表示すると
Connection id: 15
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 4.1.10-Max-log
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: ujis
Client characterset: ujis
Conn. characterset: latin1
UNIX socket: /var/lib/mysql/mysql.sock
セグメンテーション違反です
となってしまします。
どうしたらいいのでしょう・・・
0876nobodyさん
05/02/25 23:04:54ID:???CGIでコマンド発行してみても受け付けて貰えなかったです。
PHPのMySQL関数には、ユーザー作成に関する物がないみたいですし。
宜しくお願いします
0877nobodyさん
05/02/25 23:12:53ID:???普通にmysqladminで発行できるが...マニュアル100回読んできな。
mysqlにユーザ作成コマンドをぶち込んでも同様にできると思うけど、
明確にadmin操作と一般操作は分けといた方が管理上は良い。
0878nobodyさん
05/02/25 23:26:47ID:???mysqladmin ユーザ追加のコマンドがありましたっけ?
マニュアル見てもその辺り載ってないんですが。
CGIやPHPでGrantコマンドを投げても実行されないんで困ってます。
0879nobodyさん
05/02/25 23:57:23ID:???サーバー管理者に聞くか、マニュアルを100回読むのがいいと思う。
接続に使用してるmysqlアカウントにgrant権限がないとかそういうことでしょ。
あと、マルチはどこへいっても嫌われるぞ。
0880nobodyさん
05/02/26 00:21:18ID:???ごめん、adduserコマンドは俺拡張(中身はGRANT)...
回線切っ首。
スクリプトからGRANT発行して駄目なのは、
adminのアカウントを使ってないためか、
GRANT権限に制限のあるmysqlユーザだとか、その辺では?
コマンドライン上で同じものを指定して試行してみれ。
0881nobodyさん
05/02/26 00:45:55ID:???ありがとうございます。
練習用として自宅サーバに入れたMySQL使ってますんで、
adminアカウントでやってます。
mysqlのコマンドライン上にてgrantするとちゃんとユーザが追加されるんですが、
phpのsystem関数でコマンド投げても受け付けて貰えません。
・・そもそもやり方が間違ってるような気もするのですが、
phpの関数にユーザ追加ってのが無いですし、どうしたものかと思いまして。
何か他のやり方があるのでしょうか?
0882nobodyさん
05/02/26 02:00:38ID:???なんとかしてそのエラーを見つけてきたまい
0883nobodyさん
05/02/26 03:38:26ID:???PHPからやるならMySQL関数でadminアカウントを指定し
GRANTのクエリを発行すれば良いです。
system関数で駄目なのは根本的にコマンドが通ってないと思われるので
もっと簡単なコマンドを発行してみて結果がどのように返ってるか
を確認しながら作業すべし。
0885nobodyさん
05/02/28 12:49:34ID:???パーミッションなどは引き継げなくても、テーブルの中身だけでもOKです。
0886nobodyさん
05/02/28 13:36:59ID:???MySQL→PostgreSQLでもそうだけど、dumpして流し込み。
ただ、どちらにせよ型のマッチや予約語あたりはちょこっと気にせんとね。
0887885
05/02/28 14:31:31ID:???PostgreSQLのdumpは、COPYというコマンドで値をセットしているのに対し、
MySQLのdumpは、INSERTコマンドを繰り返してセットしており、
COPYコマンドは受け付けてくれないみたいなのです。
0888nobodyさん
05/02/28 14:34:29ID:???ほんとにすいません。pg_dumpのオプションに、こんなのがありました。
-d, --inserts dump data as INSERT, rather than COPY, commands
-D, --column-inserts dump data as INSERT commands with column names
あとは手動でどうにかします。
0889nobodyさん
05/02/28 20:05:19ID:???php.ini において、magic_quotes_gcp = on にしていれば、
SQLインジェクションに対して安全でしょうか?
やはり
mysql_real_escape_string() とか mysql_escape_string() とか addslashes を
使うべきでしょうか?
0890nobodyさん
05/03/02 18:12:04ID:???FC3での日本語がutf-8なので、MySQLにutf-8で日本語を詰め込んでしまいました。
このMySQL上のデータベースを、MyODBC経由でMS-Windowsから操作したいのですが、
utf-8を正しく扱えるMyODBCドライバ、もしくは関連する情報をお持ちでしたら教えて頂けませんか?
0892nobodyさん
05/03/05 02:18:48ID:80ZPRUuI私は
where date like '2005-03%'
としていますが、これは妥当なのでしょうか?
0893nobodyさん
05/03/05 11:51:20ID:???0894nobodyさん
05/03/06 07:58:57ID:???エディタって何使ってますか?
もちろんコマンドから操作すれば不要なのは分かるんですが、
phpmyadminみたいに、sqlコマンドが色分けされる(デフォになくても
SQL用の強調表示ファイルが存在する)エディタがあれば良いなぁと。
0895890
05/03/10 18:17:59ID:???mysql4にすれば、SET CHARACTER SETでコードを設定できますね。
mysql4にあげてみることにします。
ありがとうございました。
0896nobodyさん
05/03/12 16:14:26ID:nH5XpFGK記録されていたデータを全部deleteしたにもかかわらず、
新しくデータを記録するとauto_inclementのint型フィールドの値が、
消す前の続きから始まってしまいます。
これは仕様ですか?
0897nobodyさん
05/03/12 16:23:53ID:nH5XpFGK適当にデータを入れ、Updateして無理やり1にしてみましたが、
更にまた新しくデータを追加してみると、2ではなく
消す前の値の続きからになってしまいます。
0898nobodyさん
05/03/12 16:50:21ID:???間違ってる。
last_insert_id()はコネクションごとにIDを保持するから、一度コネクションを
切ってから再接続してやってみたら1から始まるかもしれない。
0900nobodyさん
05/03/12 19:27:21ID:???PHP+MySQLで組んでます。
項目が多いのでクエリが長いんですよね・・・
で、ダラダラと横一列に書くのではなく、各カラム毎に改行して見やすくしたいのですが、
どうすれば良いのでしょうか?
__ ←を使うと良かったと思うのですが・・・
宜しくです。m(_ _)m
0902nobodyさん
05/03/15 02:06:06ID:???ああ、手遅れか。
ALTER TABLE table_name AUTO_INCREMENT=0;
>>898
とてつもなく勘違いしてるな。
0903nobodyさん
05/03/15 16:08:27ID:veLUi2ywでも検索をする時に各値が一意なものであることが分かっていれば、
一つ目の該当レコードを見つけた時点で検索を打ち切る事が出来て効率化するはず。
だから二つ以上のフィールドに一意である事を示したいのだけど、やり方がわからない。
もしかしたらフィールド作成時に明示しなくてもMySQLが勝手に判断してくれるのかも?
教えてください。
0904nobodyさん
05/03/15 16:26:07ID:???0905nobodyさん
05/03/15 20:58:58ID:???$sql = "SELECT * FROM Table "
."WHERE Field1=100 "
."AND Field2=200;";
0906nobodyさん
05/03/15 21:54:03ID:???えぇえぇっ!
俺普通に、
$sql = "SELECT * FROM Table
WHERE Field1=100
AND Field2=200";
って適度に改行して書いてるんだけど…
0907nobodyさん
05/03/15 22:05:17ID:???0908nobodyさん
05/03/15 22:05:48ID:???0909nobodyさん
05/03/15 22:06:16ID:???0911nobodyさん
05/03/15 22:47:33ID:???それ、連続した無用なスペースと改行が$sqlに入るけど
mysql_query()に渡す前にちゃんと処理してんの?
それともほったらかし?
0912nobodyさん
05/03/16 00:17:04ID:???参考書などで、よく、
$sql = ""; ←これ
$sql .= " SELECT * FROM table"
・・・
と見かけるんだけど、
この1行目はどういう意味があるんでしょうか。。。
0915nobodyさん
05/03/16 01:13:02ID:???前後のソースを見ないと何ともいえんが、変数になんか入れておかないと
エラーになる場合があるから、保険みたいなもんだ。
0919nobodyさん
05/03/16 10:43:33ID:???それもあるけど、""で初期化の意味合いが強いと思う。
$sqlなんてクエリ文字列用の変数として使いまわす可能性が
高いし、中に何か入ってるか判らないところに結合するのは怖い。
0920nobodyさん
05/03/16 10:46:46ID:???最初から「=」として代入しないのは、無駄といえば無駄だけどね。
0921nobodyさん
05/03/16 12:32:40ID:???で十分
0922nobodyさん
05/03/18 17:04:41ID:???$sql.=" select";
$sql.=" 名前 as name";
$sql.=" 年齢 as age";
$sql.=" from 個人情報";
$sql.=" where";
$sql.=" 店舗ID=".$t_id;
$sql.=" 性別=".$sex;
$sql.= ...........
最初のselectだけドットをつけないのを見逃すかもしれない
単純なselect一発なら大丈夫だと思うけどね
だからSQL文は全て .= にしてその代わり
$sql="";
を頭に置く
ちなみに漏れもよくやる
コピー&ペーストで楽ができるからね
0924nobodyさん
05/03/18 17:18:07ID:???0925nobodyさん
05/03/18 17:58:45ID:???それだとスペースと改行が入っちまうじゃん。
とはいえ長さが問題になるほどのクエリーになるとも限らんし、
クエリのサニタイズの処理で考慮しえあるなら、別にいいけどな。
0927nobodyさん
05/03/18 18:43:03ID:???書き間違えが多い文章になったが、最後の2行を読んで理解してくれ。
$sqlをその後どう使うかは判らん場合「無問題」とは言えないだろ。
0928nobodyさん
05/03/18 20:14:49ID:???美しさを無視する奴はプログラマ失格。
「いいじゃん、動けば」
0929nobodyさん
05/03/18 21:09:30ID:???0930nobodyさん
05/03/18 22:38:57ID:???0931nobodyさん
05/03/18 23:41:11ID:???0932nobodyさん
05/03/18 23:45:27ID:???0933nobodyさん
05/03/19 02:39:53ID:???0934nobodyさん
2005/03/23(水) 03:45:21ID:???0935PHP初心者
2005/03/24(木) 00:01:54ID:vk1AucmH1 | 山田 | 山手線 | 中央線
2 | 田中 | 埼京線 | 山手線
3 | 加藤 | 総武線 | 京王線
山手線を使用している人を表示したい場合など、
複数のフィールドからの検索は可能でしょうか?
rosen1から山手線を検索して表示する場合は、
select * from aiueo where rosen1 like '山手線'
とすれば山田さんが表示されるのですが、
rosen1とrosen2の両方から検索し、山田さんと田中さんを表示させることは可能でしょうか?
0937PHP初心者
2005/03/24(木) 17:13:57ID:aYVGSrBn「or」で上手くいきました!
0938nobodyさん
2005/03/25(金) 18:57:02ID:???このA、Bの組み合わせをユニークにすることはできますか?
現状、
1、SELECT の where a=A AND b=B で行数を取得。
2、1が0ならINSERT。
のようにしていますができたら1回だけでINSERTしたいのですが、、、
0939nobodyさん
2005/03/30(水) 11:51:00ID:???それってAとBの中身によるんじゃないの。
例えばAの3番目と5番目のレコードが同一でユニークになっていなくてそれ以外はユニークで、
Bも3番目と5番目のレコードが同一でユニークになっていなくてそれ以外はユニークな場合、
AとBを組み合わせた時3番目と5番目が同一のものになりユニークにならない。
でも例えばBが2番目と4番目のみが同一な場合はユニークになるけどね。
ただしAとBでおよそ被らないであろう全く異なるデータを扱っているという前提で、だが。
同一レコードが何番目にあるのかをABそれぞれで調べて被ってないかを調べればユニークになるかどうかは分かる。
0940nobodyさん
皇紀2665/04/01(金) 22:01:15ID:???0941nobodyさん
2005/04/02(土) 10:44:26ID:ftpZSEGbレコードが追加される時に
このプライマリキーを用いた降順あるいは昇順にソートして追加していきたいんだけど
mysqlにこれをやってくれる機能はありますか?
0942nobodyさん
2005/04/02(土) 13:06:49ID:???0943nobodyさん
2005/04/02(土) 20:10:05ID:???RDBのテーブルはINSERT時に格納順序を指定することはできない
順序はSELECTするときに指定するもの
0944nobodyさん
2005/04/05(火) 09:09:14ID:R5kNClWz検索条件に該当するレコードがprimary keyの特定の範囲内にしか存在する可能性が無いと分かっている時、
その範囲を検索条件で指定する事は出来ませんか?
検索回数の減少に繋がると思うのですが。
0945944
2005/04/05(火) 09:18:22ID:???単純にwhere primarykey > 下限 and primarykey < 上限とすると、
全てのレコードに対してこの条件に一致するかが比較されてしまいそうですが、
直接下限から上限の間のprimarykeyのみに絞って比較を行いたいという事です。
indexを作成しておけば2行目の条件式で4行目の処理をmysqlが自動的にやるんでしょうか。
0946nobodyさん
2005/04/05(火) 11:26:06ID:???縦がフィールド横がレコードと見た時の1マスに複数のデータを持たせて、
検索時に複数レコードがヒットした時に、被っているデータはまとめて出力したいのです。
レコード1のAフィールド{1,2,3,4,5}
レコード2のAフィールド{3,4,5,6,7}
とある時、レコード1と2がヒットしたらAフィールドの内容として{1,2,3,4,5,6,7}と出力したいという事です。
{1,2,3,4,5,3,4,5,6,7}と単純に内容をつなげて出力するのであれば、
各データをコンマで区切った文字列として入力してあるものを繋げて出力するだけで済みそうですが、
まとめて出力する方法が思いつきません。
これに相当するような処理でも構わないのですが何か方法はあるでしょうか?
0947nobodyさん
2005/04/05(火) 16:53:51ID:???整数型のカラムだったら単純に、インデックスを張る=効率的に検索してくれる
と考えてオーケー。
それよか SQL には between という指定方法もあることを覚えておいてほしい。
0948nobodyさん
2005/04/05(火) 17:02:09ID:???1マス…っていうか1カラムに複数のデータを突っこむのは
RDBの特長や性能を殺すようなものだからやめといたほうがいい。
その例だと本来は10レコードになるように表を設計する。
そうしておけば重複をまとめるのは distinct で一発でできる。
0949nobodyさん
2005/04/05(火) 17:29:54ID:???セパレータで結合する関数はあるが分割する関数は無い(と思う)から無理じゃね
PHPとかと組み合わせたら何でもできるけど
0950nobodyさん
2005/04/05(火) 19:45:52ID:???数値型だと符号なしbigintでも20桁しか使えない。(40桁くらいの数字を扱いたいのに・・・)
なんで?
文字型は数字以外の文字もカバーしてる分、余計にデータが長くなると思うのだけど。
たぶん数値型は内部では2進数で直接数量が表されてるよね?
もしそうだったら文字型よりだいぶ短そうなのに。
色んな演算を加える可能性があるから数値型は短いものしかダメなのだとしたら、
演算をしないけども数字ばかりのデータを扱う場合は文字列型が適してる?
0952nobodyさん
2005/04/06(水) 08:41:59ID:???「何で?」つうかデータベースは今も昔も
別に学術的な数値計算を行うシステムではないので。
データベースに限らず今のマイクロプロセッサの設計に置いてもね。
SQLでどうしてもやりたいなら、MySQLのユーザ関数に計算ライブラリを
組み込む手もあるが、データベースは単にデータを蓄積するものとして、
(ここはWebProg板だし、それっぽく)PHPのGMP関数で処理するのが良いんじゃね。
0953nobodyさん
2005/04/06(水) 09:43:35ID:???なんでという理由なら一般のCコンパイラの整数値が
long 型の、-9223372036854775808 〜 9223372036854775807 の範囲までしか扱えないから
でしょう
0954nobodyさん
2005/04/07(木) 12:34:57ID:M6scFfsmselect field from table1,table2,table3;
という記述ではemptyしか出ません。
このような記述では出来ないのでしょうか?
それと、mergeテーブルというものがあるようですが、MyISAMにしか対応していないようで、
トランザクションセーフで無ければならないので困っています。
0957nobodyさん
2005/04/09(土) 12:13:03ID:???レコードが追加される可能性のあるテーブルが一つで他は静的なテーブルであればやり方が分かるのですが、
全てのテーブルにレコード追加の可能性がある場合です。
0958nobodyさん
2005/04/10(日) 20:55:02ID:???と書いてみたのですがfield = field.stringのところでエラーが出ます。
field = field.'string'等も試したのですがダメでした。
文字列を追加するにはどう記述すれば良いのですか?
0961nobodyさん
2005/04/11(月) 15:04:52ID:AZghOiamPOSTで受け取ったスペース区切りキーワードをexplodeして、
for($i=0;$i<$countKey;$i++){
$wheresql .= "search like '%{$keyArray[$i]}%' and ";
}
(search=検索ワードを詰め込んだカラム)
って感じで繋いで、where $wheresqlしたんですが、結果は通ってうまくいくときはあるんですが、結果0になったり、それらのワードが含まれてるのに出ないレコードがあったりします。。
どこか根本的に間違っているのでしょうか・・・。
and検索って普通どうやってやるんですか?
0962nobodyさん
2005/04/11(月) 15:33:57ID:???スペースが連続したり全角スペースの場合を考慮すれば、preg_split()が望ましいと思う。
あとはforeachとかで回しながらqueryを作ればいい。
likeと%の意味は理解してるかな?
0963961
2005/04/11(月) 16:21:22ID:???ありがとうございます。
一応
$keyword = str_replace(' ',',',$keyword);
$keywords = str_replace(' ',',',$keyword);
こんな感じで全半スペースを,に変えてexplodeしてました。
likeは、パターンに一致、前後%%は前後に〜○○〜と続く、みたいな意味でしたっけ。。
それだと、前に何もない文字列が引っ掛からなくなりますか・・・ためしに、loopで回す文字列を
$wheresql .= (search like \"%{$keyarray[$i]}%\" or search like \"%{$keyarray[$i]}\" or search like \"{$keyarray[$i]}%\") and "
にしてみましたが結果変わらず・・・。
0964nobodyさん
2005/04/11(月) 20:03:55ID:zHJjbS9v0965nobodyさん
2005/04/11(月) 21:07:58ID:???文字コードは特に限定はされてなかった筈。ただ単語と認識するのが
スペースでセパレートされてるワードだけなんで、
そういう作りではない言語(日本語とか韓国語とか中国語とか)には
そのままでは使えない。
0966nobodyさん
2005/04/12(火) 00:26:29ID:FxpxEm5t私の環境は、PHP(4.3.10) + MySQL(3.23.58)、文字コードはEUCです。
2バイト文字を含む部分一致のlike検索において、以下のような問題が起きます。
「L」(全角のエル)を検索した場合に、「藤木」を含む文字列にヒットします。
原因は、Lをあらわす文字コードが、藤木の藤の後ろ半分と、木の前半分を同じ
であることでした。
binaryにすれば大丈夫という話を見かけたので、この2バイトの文字列は、
それまでtext型で持っていたのですが、BLOB型にしました。
like検索の高速化を図った4.X系列では2バイト文字列を考慮していないため、
こういう症状が出るバージョンがあると見たのですが、3.23.58もそうなのでしょうか?
解決策があるなら、ご紹介いただければ、幸いです。
0967nobodyさん
2005/04/12(火) 09:45:57ID:???0968nobodyさん
2005/04/12(火) 15:23:41ID:6tLufYli0969nobodyさん
2005/04/12(火) 20:03:28ID:???SELECT * FROM table WHERE id=1というクエリを実行した時、
id=1のデータは無いのに検索に成功し、エラーを吐かずに処理を続行してしまいます。
同じ処理をPerlで行った時は成功するのですが何が原因なのでしょうか?
環境はWin+Apache1+PHP4+MySQL4.0.18
文字コードはスクリプト、データともEUCです。
レス数が950を超えています。1000を超えると書き込みができなくなります。