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

  • PHP
  • 回答数1
  • ありがとう数1

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

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

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

t_getsuei
質問者

お礼

問題解決しました! まず問題の箇所は指摘されたとうり「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');」と入れないと日本語がはいらないようです。

t_getsuei
質問者

補足

回答ありがとうございます。 ご指摘ありました「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内に日本語名のテーブルを作成する事ができません。

    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
  • 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
  • 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)、mysql_query()関数のところで1366エラーが出ます。 半角英数ならエラーは出ません。 プログラムを貼り付けます。どなたかお願いします、説明をもっと書きたいのですが私もあまりわかってないのでどうもすみません。 今やっていることは全てローカルですwindowsを使ってます、文字コードもshift_jisです。phpもmysqlも一台のコンピュータでやっています。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>MySQLへデータを登録</title> </head> <body> DBとの連携テスト結果<br> <?php // DBに接続 if(!$con=mysql_connect("localhost","root","y3kwyuba")){ echo"connect_error"; exit; } // DBを選択 if(!mysql_select_db("test",$con)){ echo"select_db_error"; exit; } //MySQL4.1への対応 //mysql_query("SET NAMES SJIS"); この上の行のコメントをはずすとうまく動くのですが色々調べましたら、この書き方は推奨されないと書いてありました、他に対策はあるのでしょうか? $name = $_POST['nm']; $age = $_POST['age']; // フォームで送られてきたデータでINSERT文を作成 $sql = "insert into t_touroku(name,age) values('$name',$age)"; // SQLを実行 if(!$res=mysql_query($sql,$con)){ echo"query_error"; echo "エラー番号:".mysql_errno(), #エラー番号 "メッセージ:".mysql_error(); #エラーメッセージ exit; } // DBから切断 mysql_close($con); // メッセージ出力 echo"登録完了"; ?> </body> </html> 宜しくお願いします。

    • ベストアンサー
    • 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
  • ユーザ名・パスワードなしでDBに接続できますか?

    始めまして、プログラム初心者です。 環境はwinXP SP2, office2003、PHPはVertrigoServで構築しようとしています。 仕事の効率化を図ろうと、 同じドメイン内にあるDBサーバにアクセスしてデータを持ってきたいのですが、プログラム方法がわからないので教えて頂けませんでしょうか。 既に退職した方が作成したExcel VBAではそのサーバにアクセスでき、SQLでデータをひっぱってこれるのですが、ユーザ名・パスワード・DBパスなどが記載されていません。 このDBサーバにPHPで接続したいのですが、やはりユーザ名・パスワードなどを指定しないと接続できないのでしょうか。 接続できるVBAは下記になります。 Dim strSQL As String Dim SqlDB As Object Dim SqlRS As Recordset '[Microsoft ActiveX Data Object 2.6 Library] Set SqlDB = CreateObject("ADODB.Connection") SqlDB.Open "DRIVER={SQL Server};server=(サーバ名が入っています);trustedconnection=true" SQL文は割愛 Set SqlRS = CreateObject("ADODB.Recordset") SqlRS.Open strSQL, SqlDB, adOpenKeyset, adLockReadOnly SqlRS.Close Set SqlRS = Nothing SqlDB.Close Set SqlDB = Nothing 自分なりに検索してみたのですが、ユーザ名・パスワード・DBパスが記載されてないケースを見つけられなくて。 ADOdbなるものを探したのですが、これをダウンロードすれば、ユーザ名等なくても接続できるようになるのでしょうか。 (下記のphpで実施してみましたが、うまくいきませんでした。) <?php // データベース設定 $dbServer = '(サーバ名)'; $dbUser = ''; $dbPass = ''; if ($link = mysql_connect($dbServer, $dbUser, $dbPass)) { // 接続成功 echo 'MySQLに接続しました。<br />'; # MySQLデータベースから切断します。 mysql_close($link); echo 'MySQLから切断しました。<br />'; } else { // 接続失敗 echo 'MySQLに接続できませんでした。<br />'; } ?> 必要な情報などあれば探してご連絡します、すみませんがよろしくお願いいたします。

  • php,sqlのテーブル作成について

    php,sql文について質問があります。 現在、テキストボックスに文字を入力したら、DBにその名前のテーブルを新規作成するプログラミングに挑戦中なのですが、 以下のプログラミングでは、テーブルが作成されません どこ を直したらいいのでしょうか? php,sqlに詳しい方どうかご教授お願い致します。 <?php try{ $dbh = new PDO('mysql:host=localhost;dbname=aaaa','bbbb','cccc'); }catch (PDOException $e){ var_dump($e->getMessage()); } $stt = $db->prepare('CREATE TABLE date( abcID char(6) )' ); echo'テーブルを新規作成しました'; ?> ちなみに以下のプログラミグでデーターベースに接続出来ることは確認しております <?php try{ $dbh = new PDO('mysql:host=localhost;dbname=aaaa','bbbb','cccc'); } catch(PDOException $e){ var_dump($e->getMessage()); exit; } echo'DBに接続しました'; ?>

    • 締切済み
    • PHP
  • 続・ユーザ名・パスワードなしでDBに接続できますか?

    始めまして、プログラム初心者です。 前回、質問番号5370624にて、windows認証という存在を教えてもらい、自分なりにいろいろ探したのですが、いまいちわからなくて、、 環境はwinXP SP2, office2003、PHPはVertrigoServで構築しようとしています。 仕事の効率化を図ろうと、 同じドメイン内にあるDBサーバにアクセスしてデータを持ってきたいのですが、プログラム方法がわからないので教えて頂けませんでしょうか。 既に退職した方が作成したExcel VBAではそのサーバにアクセスでき、SQLでデータをひっぱってこれるのですが、ユーザ名・パスワード・DBパスなどが記載されていません。 このDBサーバにPHPで接続したいのですが、PHPではどう記述すればよいでしょうか。 ADOdbやLDAPやMSSQLなどいろいろ検索でひっかかるのですが、結局どれを使えば実現できるのかわからなくて。。 接続できるVBAは下記になります。 Dim strSQL As String Dim SqlDB As Object Dim SqlRS As Recordset '[Microsoft ActiveX Data Object 2.6 Library] Set SqlDB = CreateObject("ADODB.Connection") SqlDB.Open "DRIVER={SQL Server};server=(サーバ名が入っています);trustedconnection=true" SQL文は割愛 Set SqlRS = CreateObject("ADODB.Recordset") SqlRS.Open strSQL, SqlDB, adOpenKeyset, adLockReadOnly SqlRS.Close Set SqlRS = Nothing SqlDB.Close Set SqlDB = Nothing (下記のphpで実施してみましたが、うまくいきませんでした。) <?php // データベース設定 $dbServer = '(サーバ名)'; $dbUser = ''; $dbPass = ''; if ($link = mysql_connect($dbServer, $dbUser, $dbPass)) { // 接続成功 echo 'MySQLに接続しました。<br />'; # MySQLデータベースから切断します。 mysql_close($link); echo 'MySQLから切断しました。<br />'; } else { // 接続失敗 echo 'MySQLに接続できませんでした。<br />'; } ?> 必要な情報などあれば探してご連絡します、すみませんがよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • MySQLで0で検索できない

    以下のようなPHPのソースとMySQLのテーブルで、numberが0の行をhtmlで取得しようとしているのですが、検索窓に0を入れて検索しても取得できません。ちなみに、numberが1や2の行は取得することができます。 なぜnumberが0の行を取得できないかと、どうすればnumberが0の行を取得することができるか教えてください。 <PHPのソース> <?php $url = "localhost"; $user = "root"; $pass = ""; $db = "test"; $html = ""; // MySQLへ接続する $link = mysql_connect($url,$user,$pass) or die("MySQLへの接続に失敗しました。"); // データベースを選択する $sdb = mysql_select_db($db,$link) or die("データベースの選択に失敗しました。"); // クエリを送信する $sql = "SELECT * FROM test"; $result = mysql_query($sql, $link) or die("クエリの送信に失敗しました。<br />SQL:".$sql); //結果セットの行数を取得する $rows = mysql_num_rows($result); ?> <form action="" method="post"> <input type="text" name="numberSearch" value=""> <input type="submit" value="検索"> </form> <?php //表示するデータを作成 if($rows && !empty($_POST['numberSearch'])){ while($row = mysql_fetch_array($result)) { if ($row["number"] == $_POST['numberSearch']) { $html .= "<tr>"; $html .= "<td>".$row["alphabet"]."</td><td>".$row["number"]."</td>"; $html .= "</tr>\n"; } } }else{ $msg = "データがありません。"; } // MySQLへの接続を閉じる mysql_close($link) or die("MySQL切断に失敗しました。"); ?> <html> <head> <meta charset="utf-8"> <title>numberSearch</title> </head> <body> <table width = "200" border = "0"> <tr bgcolor="##ccffcc"><td>alphabet</td><td>number</td></tr> <?= $html ?> </table> </body> </html> <データベースのテーブル> alphabet number A 0 B 1 C 2 D 1 E 1 F 0 G 1

    • ベストアンサー
    • MySQL