※ ChatGPTを利用し、要約された質問です(原文:mysql_select_db()関数に関して・・・。MySQLでテーブルの作成ができません。)
MySQLでテーブルの作成ができません
このQ&Aのポイント
MySQLのmysql_select_db()関数がうまく働かず、テーブルの作成ができません。
データベースへの接続は成功しているようですが、mysql_select_db()関数がエラーとなります。
mysql_connect()での接続は正常に行えているため、問題はデータベースの選択にある可能性があります。
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()関数がうまく働いていないようです。
つまりデータベースの選択ができていないので当然エラーとなるようです。
もう何日も悩んでいます。わかる方がいましたらどうぞよろしくお願いします。
お礼
問題解決しました! まず問題の箇所は指摘されたとうり「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');」と入れないと日本語がはいらないようです。
補足
回答ありがとうございます。 ご指摘ありました「mysql_query($str_sql,$selectDB);」の箇所をmysql_query($str_sql,$link);としてみましたが、やはりテーブルは全く作られません。 SQL文自体はphpMyAdmin上で入力させればできるのでどこかが間違えているのでしょうか。