• ベストアンサー

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 "データベースの作成に失敗しました。"; } ?>

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

  • ベストアンサー
  • x_jouet_x
  • ベストアンサー率68% (162/236)
回答No.1

記載されたソースコードだけだと、MySQLがどのようなエラーを吐いているか分からないので、 $rst = mysql_query($sql,$con); の直後に echo mysql_errno($con); を追加して、MySQLがどのようなエラーを吐いているか確かめてみて下さい。

nccno21
質問者

お礼

echo mysql_errno($con); を実行したところ,"0testancを作成しました。" となりました。 上記を//でコメントアウトして別名で実行したところ"testanc2を作成しました"となり,コマンドプロンプトで確かめると,新規に2つテーブルができていました。 先ほど質問してから帰宅するまで何もいじってないのになぜでしょうか? $nameにはテーブル名(日本語or英数字)が入る予定ですが,変数を使用する場合はそのまま$変数名でよかったんでしょうか?

その他の回答 (2)

  • ts3m-ickw
  • ベストアンサー率43% (1248/2897)
回答No.3

Postgre使いなのでハズしているかもしれませんがご容赦を。 データベースの管理者にhttpが登録されてないと、PHPからテーブル作成とかできなくないですか?

nccno21
質問者

お礼

>データベースの管理者にhttpが登録されてないと というのはmysqlのusrテーブルに格納されているユーザーの中にということでしょうか? 私もmysqlは初心者なのでよくわかりませんが,少なくとも特別に管理者を作成するようなことはしていません。 ※デフォルトで存在するのかもしれませんが PHPからのテーブル作成はできるようになりました。

回答No.2

どんな変数が帰ってきているか分からないので、まずそれを確かめましょう。 ただ、使い方自体はあっている気がします SQL文の中でどんなSQLが発行されているか確認はしましたか? echo $com; echo $selectdb; echo $sql; をつけてください $comと$selectdbではif文排他でも構いません 当たり前のことを説明しますが$comと$selectdbで本当にアクセスできているのかをチェックします。 別の回答を見るようでは、ここは問題ないようですが基本なので、必ずつけたほうが良いと思います。 次に$sqlで流すSQLの確認をします。 ここで流すSQLを保存しておけば、実際にSQLでエラーが起きているかを確認できます。 以上でおそらく解決可能な情報は得られると思います 特に$sqlが怪しい気がします。そこを中心に調べたらいかがでしょうか?

nccno21
質問者

お礼

回答ありがとうございます。アドバイス通り下記を実行しましたが,エラー出ることなく正常に内容を表示しました。 表示内容もあっていました。 echo $con; echo $selectdb; echo $sql; とりあえず変数を使用してテーブルを作成することはできるようになりましたので問題解決なのですが,質問をしてからその後ソースをいじってないのに,会社→自宅に移動しただけでプログラムが走るようになったのが不思議でたまりません。 もちろん,会社特有の環境とかはなくて,ノートPCでのローカル環境です。 アドバイスいただいたデバック方法は今後も活用させていただきます。 ありがとうございました。

関連するQ&A