• ベストアンサー
  • 困ってます

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()関数がうまく働いていないようです。 つまりデータベースの選択ができていないので当然エラーとなるようです。 もう何日も悩んでいます。わかる方がいましたらどうぞよろしくお願いします。

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数876
  • ありがとう数1

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

  • ベストアンサー
  • 回答No.1
  • yambejp
  • ベストアンサー率51% (3827/7415)

>mysql_query($str_sql,$selectDB); リンクリソースに接続しろと書いてあるのだから mysql_query($str_sql,$link); とすべきでは?ただし、第二引数は省略できるので (リンクに特定のDBを選択た情報がふくまれるということ) mysql_query($str_sql); でもいけるとは思いますが。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

問題解決しました! まず問題の箇所は指摘されたとうり「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上で入力させればできるのでどこかが間違えているのでしょうか。

関連するQ&A

  • phpでmysqlで作成したdbを表示したい。

    現在phpのプログラムの学習を行っています。、 phpmyadminで作成したデータベースを読み込もうとしているのですが、うまくいきません。 参考書やサイトも参考にしたのですが、警告が出ています。 よくわからなくなってきましたので、教えていただきたいです。 ------------------------------------------------------------------------------- ・実行結果 Resource id #31Resource id #40 接続ID: 選択の成否: 結果ID: 行数: Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\job\job.php on line 45 ------------------------------------------------------------------------------- ・ソース <?php /*$con = mysql_connect('localhost','root','root') or die("接続できません"); print "接続に成功しました。"; mysql_close($con);*/ $url = "localhost"; $user = "root"; $pass = "***"; $db = "***"; // MySQLへ接続する $link = mysql_connect($url,$user,$pass) or die("MySQLへの接続に失敗しました。"); // データベースを選択する $sdb = mysql_select_db($db,$link) or die("データベースの選択に失敗しました。"); // クエリを送信する $sql = "SELECT * FROM t01prefecture"; $result = mysql_query($sql, $link) or die("クエリの送信に失敗しました。<br />SQL:".$sql); //結果セットの行数を取得する $rows = mysql_num_rows($result); //結果保持用メモリを開放する mysql_free_result($result); echo "$link"; echo "$sdb"; echo "$result"; echo "$rows"; echo "<br>"; echo "接続ID:<?= $link ?><br />"; echo "選択の成否:<?= $sdb ?><br />"; echo "結果ID:<?= $result ?><br />"; echo "行数:<?= $rows ?><br />"; $recordSet = mysql_query('SELECT * FROM my_items'); while($data = mysql_fetch_assoc($recordSet)){ /*このあたりが45行目 */ echo $data['item_name']; /* ここの値を変える*/ echo '<br>'; } // MySQLへの接続を閉じる mysql_close($link) or die("MySQL切断に失敗しました。");

    • ベストアンサー
    • PHP
  • PHPでMySQLのDBに接続

    PHP,MySQLが使えるレンタルサーバーを借りているのですが, PHPでMySQLに接続し、php_dbを選択をするようにしたいのですが、 この時DBファイルはどこに置けばいいのでしょうか? 現在はMySQLの管理コマンド(?)とは別にpublic_htmlの中に PHPフォルダを作り、そこにDBファイルを入れています。 PHPのスクリプトは <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><title>練習</title> <meta http-equiv="content-language" content="ja"> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> </head><body> <?php $con = mysql_connect(); if (!$con) { echo ("Error:MySQLに接続できませんでした。<br />"); } else { echo ("接続ID=$con<br>\n"); } $selectdb = mysql_select_db("php_db" ,$con); if (!$selectdb) { echo ("Error:データベースを選択できませんでした"); } else { echo ("データベースphp_dbを選択しました。"); } ?> </body></html> としています。 MySQLには接続ができるのですが、php_dbには接続ができません。 php_dbのおき場所を変えるのか、ファイルの指定が間違っているのか その他、どの要に変更をしたらよいのでしょうか? お願いします。 環境はレンタルサーバーがLINUXでPHPのバージョンなどはわからないんです・・・!! 開発がOSがW2kでFTPで転送してます。

    • ベストアンサー
    • PHP
  • PHPから、MySQL内に日本語名のテーブルを作成する事ができません。

    PHPから、MySQL内に日本語名のテーブルを作成する事ができません。 いつも、お世話になっております。 小生、現在、WindowsXPSP3上で、Apache2.2.15とMySQL5.1.46とPHP5.2.13を使用し、PHPを勉強している、PHP初心者です。 今回質問させて頂きたいのは、PHPからMySQL内にデータベースを作成後、日本語名でテーブルを作成したいのですが、なぜか作成できません。 PHPのソースは以下の様になっています。 -----mysql.php----- <?php //MySQLに接続 $sql = mysql_connect('localhost', 'root', 'root'); if(!$sql){ print("MySQLに接続失敗" . "<br>\n"); mysql_close($sql); die(); } else{ print("MySQLに接続成功" . "<br>\n"); } //DB作成 $create_db = 'CREATE DATABASE HUMAN'; if(mysql_query($create_db, $sql)){ print("DB作成成功" . "<br>\n"); } else{ print("DB作成失敗" . "<br>\n"); mysql_close($sql); die(); } //DB選択 if(!(mysql_select_db("HUMAN"))){ print("DB選択失敗" . "<br>\n"); mysql_close($sql); die(); } //文字コードをutfに設定 mysql_query("set names utf-8"); //テーブル作成 $create_table = "CREATE TABLE 人間 (名前 VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, 年齢 INT NOT NULL, 身長 VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, 体重 VARCHAR(50) CHARACTER SET utf8 COLLATE uft8_general_ci NOT NULL, 職種 VARCHAR(50) CHARACTER SET utf8 COLLATE uft8_general_ci NOT NULL, ENGINE = MyISAM CHARACTER SET utf8 COLLATE utf8_general_ci;"; if(mysql_query($create_table, $sql)){ printf("テーブル作成成功" . "<br>\n"); } else{ print("テーブル作成失敗" . "<br>\n"); mysql_close($sql); die(); } //テーブルのデータを取得、表示 $select = "SELECT * FROM 人間"; if($result = mysql_query($select, $sql)){ print("データ取得成功" . "<br>\n"); } else{ print("データ取得失敗" . "<br>\n"); mysql_close($sql); die(); } while($getdata = mysql_fetch_assoc($result)){ foreach($getdata as $output){ print($output . "<br>\n"); } } //MySQLにCOMMIT文送信 $commit = "COMMIT;"; if(mysql_query($commit, $sql)){ print("コミット成功" . "<br>\n"); } else{ print("コミット失敗" . "<br>\n"); mysql_close($sql); die(); } //MySQLの接続終了 mysql_close($sql); ?> 以上です。 お忙しい中、申し訳ございませんが、先輩方ご教示宜しくお願い致します。

    • ベストアンサー
    • PHP
  • あるDBから別のDBのテーブルをselectしたい

    mysqlのデータベースAとBが存在するとして、 Aをuseしている状態で、Bのデータベースのテーブルをselectするには、どのような構文でSQLを実行すればよいでしょうか。

    • ベストアンサー
    • MySQL
  • mysqlへのデータ追加について

    以下を実行すると”失敗しました”が表示されます。 $q1~$q5にはtest.html(FORM)からから受け取った(POST),2ビット文字を含む100文字未満が格納されています。(POSTの受け渡しテスト部分で受け渡しの成功は確認) それをmysqlのテーブルに格納したいのですが,そこがうまくいきません。 mysqlのdataテーブルにはq1~q5のフィールドがあり,すべてtext(200)です。本やネットで調べていますが原因がよくわかりません。 mysql_query($sql, $con)の書き方がおかしいのでしょうか。 どなたかご教授下さい。よろしくお願いします。 <?php $q1 = $_POST['q1']; $q2 = $_POST['q2']; $q3 = $_POST['q3']; $q4 = $_POST['q4']; $q5 = $_POST['q5']; /*POSTの確認 $body = $q1; $body .= $q2; $body .= $q3; $body .= $q4; $body .= $q5; print $body; */ require_once("dbini.php"); $con = mysql_connect($DBSERVER, $DBUSER, $DBPASS); mysql_query("SET_NAMES 'sjis'"); $selectdb = mysql_select_db($DBNAME, $con); $sql = "insert into data (q1, q2, q3, q4, q5) values ($q1, $q2, $q3, $q4, $q5)"; $rst = mysql_query($sql, $con); if($rst){ print $q1."<br>"; print $q2."<br>"; print $q3."<br>"; print $q4."<br>"; print $q5."<br>"; print "上記の内容で登録しました。"; }else{ print "失敗しました。";} $con = mysql_close($con); ?>

    • ベストアンサー
    • PHP
  • mySQLでINSERT Errorとなります。

    初心者です。よろしくお願いいたします。 データを入れたいのですが、エラーとなってしまいます。 以下でデータベースとテーブルを作成し、 <?php $db_name="tori"; $tbl_name = "hato"; $db = mysql_connect('localhost', 'root', ''); if (!$db) { die('接続できません: ' . mysql_error()); } $sql = 'CREATE DATABASE tori'; if (mysql_query($sql, $db)) { echo "データベースtori の作成に成功しました\n"; } else { echo 'データベースtoriの作成に失敗しました: ' . mysql_error() . "\n";} mysql_select_db($db_name,$db) or die("データベースへの接続エラー"); $query ="create table {$tbl_name} ( id char(8) primary key, date TEXT, sex TEXT, age TEXT )TYPE=MyISAM"; mysql_query($query); $query ="INSERT INTO `houzingpark`.`hatogaya` ( id , date , sex , iro ) VALUES ( '2', 'uu', 'ii', 'po' )"; mysql_close($db); ?> 以下で入れ込みたいのですが、出来ないのです。 <?php $db_name="tori"; $tbl_name = "hato"; $db = mysql_connect('localhost', 'root', ''); if (!$db) { die('接続できません: ' . mysql_error()); } mysql_select_db($db_name,$db) or die("データベースへの接続エラー"); $sql="INSERT INTO hatogaya ( id , date , sex , iro ) VALUES ( 3, 2005-12-3, mesu, cya )"; mysql_query($sql); if(!$result){print 'INSERT Error!';} echo $sql; mysql_close($db); ?> でINSERTしようとするのですが、INSERT Error!と表示されてしまいます。 Adminで見るとデータベースとテーブルは出来ているのですが、どうしてもINSERTできないのです。 もう何時間も悪戦苦闘しております。 どなたかご指導よろしくお願いいたします。

  • PHPでMySQLのデータを検索したい

    お世話になります。 PHPでMySQLのデータを検索したいと思い、 以下のようにしてみたのですがうまく表示されません。 -- $name = $_POST["name"]; $link = mysql_connect('localhost', '', ''); $db_selected = mysql_select_db('', $link); mysql_set_charset('utf8'); $sql = "SELECT * FROM search WHERE". $name; $result = mysql_query($sql); while($row = mysql_fetch_array($name)) { print $row['name']; } $close_flag = mysql_close($link); -- どう改善すればいいのでしょうか? 初心者の為、少々お見苦しい点があるかと思いますが どうぞよろしくお願いします。

    • ベストアンサー
    • PHP
  • mysql と php で、2テーブル結合の検索!

    mysql と php を勉強しはじめで、解からないので、どなたか教えてください! 2テーブルあります。( 例 ’name’ と ’jusyo’ テーブルです。) ’name’テーブルは、NO int、IC_NO char(5)、NAME char(18)、 ・・・・・です。 ’jusyo’テーブルは、NO int、NAME_KANA char(30)、TEL char(6)、JUSYO char(50)、 ・・・・です。 この2テーブルを、《NO int、》で、左結合(レフトジョイン)させます。 テキスト入力フィールド、があり、検索ボタンで検索させようと思っています。 テキスト入力フィールドには、IC_NO を入力し、’jusyo’テーブルの、NAME_KANA TEL JUSYO・・・ を表示させたいと思っています。 <?php extract($_POST); echo " <form action=\"kensaku2.php\" method=\"post\" > <p>検索番号 : <input type=\"text\" name=\"nam\" value=\"$nam\" size=\"10\">   <input type=\"submit\" value=\"検索\"></p>\n </form> "; if($nam<>''){ mysql_connect('localhost','root','******'); mysql_select_db('データベース名'); $sql= "select * from name left join jusho on NO=NO"; $sql= "select * from name where IC_NO like '%$nam%'"; $result = mysql_query($sql); $rows = mysql_num_rows($result); if($rows == 0){ echo "<p>該当データがありません。</p>\n"; } else { while($row = mysql_fetch_array($result)){ echo "詳細情報"; echo "<br />\n"; echo "<br />\n"; echo "インター名 : "; echo $row["NAME_KANA"]; echo "     "; echo "<p>";               ↓ としてますが、NAME_KANAが表示されません、どこが間違っていますか? 考え方がおかしいのでしょうか?

  • mysql_num_rowsを使わず、SQL文のCOUNT関数で件数を得たい

    以下のサンプルを実行すればうまくいくのですが、 $con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD); $selectdb = mysql_select_db($DBNAME, $con); $sql = "select * from mytable where number = 10"; $rst = mysql_query($sql, $con); $countnum = mysql_num_rows($rst); echo $countnum . "件のレコードがありました。<br>"; ◆実行結果: 10件のレコードがありました。 「10件のレコードがありました。」という一行の実行結果を得たい目的なら、 三行目を「$sql = "select count(*) from mytable where number = 10";」 みたいにCOUNT関数を使っても結果が得られそうに思います。 というかむしろ、その方がコードが短くて済みそうな気がするのですけど。 その場合、4~6行目のPHPコードはどのように記述したらいいでしょうか。 echo $rst; としても、変な文字列を返してきました。

    • ベストアンサー
    • PHP
  • phpでのsql文で変数を使う

    POSTで受け取った文字列を,テーブル名として新規テーブルを作成したいのですが,sql文発行の際の変数の記述方法がわかりません。 ネットや本に書いてある方法は一通りためしたのですが,失敗しましたとなります。 ご教授下さい。 php 5.2.3 apache2.2.4 mysql 5.0.45 <?php require_once("../dbini.php"); $con = mysql_connect($DBSERVER, $DBUSER, $DBPASS); $selectdb = mysql_select_db($DBNAME, $con); $name = $_POST['name']; $sql = "create table $name ( qno int(3), qcontents text(500))"; $rst = mysql_query($sql,$con); if($rst){ echo $name . "を作成しました。"; }else{ echo "データベースの作成に失敗しました。"; } ?>

    • ベストアンサー
    • PHP