みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

mysql_select_db()関数に関して・・・。MySQLでテーブルの作成ができません。

こんにちは、さくらインターネットのレンタルサーバでMySQLとphpを連動させたサイトを作っているのですが、初歩的なことでつまずいてしまい困っています。

まず、フォームで入力させたデータをPOSTで受け取り、その受け取ったデータをテーブル名として、データベース上にテーブルをつくりたいのですが、エラー文が表示されるだけでできません。
データベース自体への接続はできているようなのですが、phpMyAdminで見ても全くできていません。SQL文をphpMyAdminで実行するときちんと正常にテーブルができますので、そもそもデータベースが使用できないとか、もしくはSQL文の間違いでもなさそうです。

$t1 = $_POST['test1'];
$t2 = $_POST['test2'];
echo"{$t1}を受け取りました<br>";


$link = mysql_connect('mysql**.db.sakura.ne.jp', 'ユーザー名', 'パスワード');
if (!$link) {
die('接続失敗です。'.mysql_error());
}

print('接続に成功しました。<br>');


//1.さくらインターネット内にあるデータベースの選択
$db_name = "自分のデータベース名";
$selectDB = mysql_select_db($db_name,$link) or die("接続できません。");

//2.データベース内にテーブルを作成。
echo"{$t1}がテーブル名になります。<br>";
//3.テーブル作成用SQL文
$str_sql = "CREATE TABLE {$t1}"
. "("
. "{$t2} INT(7) NOT NULL,"
. ");";

//4.上のSQL文を実行してテーブルを作る。
mysql_query($str_sql,$selectDB);
echo"データベース内にテーブル「{$t1}」を作成しました。<br>";

//データベースへの接続を切断
$close_flag = mysql_close($link);

if ($close_flag){
print('切断しました。<br>');
}

実行結果:Warning: mysql_query(): supplied argument is not a valid MySQL-Link resourceとなってテーブルは作成されず。

自分でも調べて見たところ、mysql_connect()での接続はちゃんとできているようなのですが、その次のmysql_select_db()関数がうまく働いていないようです。
つまりデータベースの選択ができていないので当然エラーとなるようです。
もう何日も悩んでいます。わかる方がいましたらどうぞよろしくお願いします。

投稿日時 - 2009-11-20 17:02:34

QNo.5462746

困ってます

質問者が選んだベストアンサー

>mysql_query($str_sql,$selectDB);

リンクリソースに接続しろと書いてあるのだから

mysql_query($str_sql,$link);

とすべきでは?ただし、第二引数は省略できるので
(リンクに特定のDBを選択た情報がふくまれるということ)

mysql_query($str_sql);

でもいけるとは思いますが。

投稿日時 - 2009-11-20 17:18:08

補足

回答ありがとうございます。
ご指摘ありました「mysql_query($str_sql,$selectDB);」の箇所をmysql_query($str_sql,$link);としてみましたが、やはりテーブルは全く作られません。
SQL文自体はphpMyAdmin上で入力させればできるのでどこかが間違えているのでしょうか。

投稿日時 - 2009-11-22 16:57:10

お礼

問題解決しました!
まず問題の箇所は指摘されたとうり「mysql_query($str_sql,$selectDB);」で、変数「$selectDB」には関数「mysql_select_db()」の帰り値、つまり「0」か「1」しか入っていないのでこんな処理はまったく無意味で、「mysql_query($str_sql,$link);」が正しいということです。

それからもうひとつですが、
$str_sql = "CREATE TABLE {$t1}"
. "("
. "{$t2} INT(7) NOT NULL,"
. ");";
の箇所、「.」とか「"」はまったく不要でした。シンプルに
$str_sql = "CREATE TABLE {$t1}
( {$t2} INT(7) NOT NULL);";
とすればよかったようです。どうも参考にしたサイトの情報が古すぎてこうなってしまったようです。今回はどうもありがとうございました。

後もうひとつ、mysql_connect()の後に「mysql_query('set names utf8');」と入れないと日本語がはいらないようです。

投稿日時 - 2009-11-22 18:25:23

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問