• ベストアンサー

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
  • 回答数3
  • ありがとう数6

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

  • ベストアンサー
  • 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

  • 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
  • スーパーグローバル変数・POSTとGETを同時に受け取るページについて

    すみません。初歩的な質問かもしれませんが、宜しくお願い致します。 PHP+MySQLを利用して、都道府県名で検索するプログラムを利用しています。 そして、サーバー移行にともない、PHPのバージョンが変わりました。 これまでは、単に「$変数」としていたのですが、 $_POST['変数']または、$_GET[変数']としなければいけないようです。 よって、従来のPHPファイル内で、 $ken_name = $_POST['ken_name']; として、置き換えるようにしました。 これで、うまくいったと思ったのですが、このPHPファイルは、GETでも、利用できるようしたいのです。 実は、その方法がわかりません。 (例) POSTで受け取る場合は、正常に動くのですが、GETでも受け取るようにするには、どうすればいいのでしょうか?1つのファイルで、POSTとGETの両方を受ける方法はありますでしょうか? <?php require_once("./***.php"); $con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD); $selectdb = mysql_select_db($DBNAME, $con); $ken_name = $_POST['ken_name']; $sql = "select * from YTABLE Where ken = '$ken_name'"; $rst = mysql_query($sql, $con); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <title></title> </head> <body> <?php while ($row = mysql_fetch_array($rst)) { print $row["ken"].'-'.$row["name"].'<br>' ; } mysql_free_result($rst); $con = mysql_close($con); ?> </body> </html>

    • ベストアンサー
    • PHP
  • 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
  • PHP+MYSQLでレコードの表示させ方

    いつも初心者の質問でスミマセン。 PHP MYSQL で 会員制ページを作っています。 このような時にはどういう風にしたらいいか教えてください。 1件のレコードに 名前 出身県 性別 がある時に 下記のようにその個人のページにリンクしたいのですが ひとつの県だけなら出来るのですが、 このように条件を色々と設定するにはどうしたらいいか ヒントだけでもお願いいたします。 沖縄県出身者 男 A B C 女 D E F 東京出身者 男 G H I 女 J K L このようにしていました。 <?php require_once("dbini.php"); $con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD); $selectdb = mysql_select_db($DBNAME, $con); $sql = "select * from mem where seibetu = 1 and area = 1 " ; $rst = mysql_query($sql, $con); $body1 .= ""; while($col = mysql_fetch_array($rst)) { $body1 .= "⇒" . "<A href='" . $col["id"] . "j.html'>" . $col["name"] . "</A>"; $body1 .= "<br>\n"; } mysql_free_result($rst); $con = mysql_close($con); ?> これでボディに<?= $body1 ?> を張っていました。 これを<?= $body2 ?> と繰り返したらいいのかと思い色々していましたが どうしてもうまくいきません。 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPのupdate文はこれでいいのでしょうか?

    php初心者ですが、どうしても出来ないので ご教授お願いいたします。 phpでmysqlのupdate をしたいのですが、 参考書などは私が作ろうとしている物より複雑で シンプルに書き換えることが出来ませんん。 会員登録をPHPで作ろうとしています。 会員自身でPR文と更新日を書き換えられるようにしたいのですが、 このような書き方でいいのでしょうか? **他のページにフォームを作ってこちらに送っています バージョンは MYSQL ver4.0.26 PHP ver4.2.2 phpMyAdmin ver2.4.6  です。 <?PHP //データベース関連のデータをインクルードします require_once("dbini.php"); //MySQLに接続します $con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD); //データベースを選択します $selectdb = mysql_select_db($DBNAME, $con); //MySQLレコード修正 $sql = "update mem set regdate = now() ,pr1 = '$pr1' where id = '00001' "; mysql_query($sql); echo "レコードの修正が完了しました"; exit; ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <title>修正ページ-2</title> </head> <body> </body> </html>

    • ベストアンサー
    • PHP
  • 別画面から遷移してきた時はDBを読み、それ以外のときはPHP_SELFを使いたい

    http://oshiete1.goo.ne.jp/kotaeru_thanks.php3?a=7486449 の#3さんにご提示いただいたサンプル(→update.phpとします)を 組み込んでみたのですが、 投稿者名<input type="text" name="name" value="{$_POST["name"]}">{$errStr["name"]}<br> の「value=""」の値について、 update.phpに遷移してきた際は、↓みたいなプロセスを経てMySQLから 読み込んだ$col["name"]を直に表示させたいです。 $myID = GetmyID(); $con = mysql_connect(localhost, root, pw); $selectdb = mysql_select_db(serv, $con); $sql = "SELECT * FROM MyTab WHERE ID = '$myID'"; $rst = mysql_query($sql, $con); $col = mysql_fetch_array($rst); $name = $col["name"]; その場合、冒頭の#3さんのサンプルの value="{$_POST["name"]}" …を、 value="if (PHP_SELFでなく別画面から遷移してきて表示する場合) {   {$_POST["name"]} } else {   {$_POST["name"]} }" みたいに分岐すればいいのではないかと思いますが、 「PHP_SELFでなく別画面から遷移してきて表示する場合」の判断は どのようにしたらできますでしょうか。

    • ベストアンサー
    • PHP
  • PHP/MySQL SQLエラーについて。

    PHP/MySQLについての質問です。 当方PHP/MySQLについては初心者で、現在参考書を見ながらWebアプリケーションを作成しています。 いくらやっても成功しない例があるので、どこが間違っているのか、 なぜ成功しないのかご教示願いたいです。 エラー名:SQL実行エラー 要因:不明。SQL文を変えたりしたところ成功したこともあるので(elect id,name,age from input_table 等)SQL文に間違いがあるのか? -------------------input.html------------------------ <!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> <body> <form action="input.php" method="post"> 名前:<input type="text" name="nm"> 年齢:<input type="text" name="age"> <input type="submit" name="exec" value="登録"> </form> </body> </html> -----------------------input.php---------------------------- <!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> <body> <?php //DB接続 if(!$con=mysql_connect("localhost","root","********")){ //passwardは正確 echo"接続エラー"; exit; } //DB選択 if(!mysql_select_db("input",$con)){ echo"DB選択エラー"; exit; } $sql = "insert into input_table(name,age) values('$nm',$age)"; if(!$res=mysql_query($sql)){ echo"SQL実行エラー"; //ここでこのエラーが表示されてしまう exit; } echo "登録完了"; mysql_close($con); ?> </body> </html> --------------------database----------------------- create table input_table( id int not null auto_increment, name varchar(20) not null, age int not null, primary key(id) )

    • ベストアンサー
    • PHP
  • if文で、レコードが無い場合だけ変数が表示しなくなる

    いつもお世話になっています。 やりたい事から説明します。 リストボックスで絞込みを2段階にしています。 その2段階目で、レコードがあればきちんと表示するのですが 無い場合に、一段階戻したいのです。 やってみた事。 前のページから、POST で 【genreno = $sgenreno】を送っています。 うまく表示するのですが、レコードが無いときにうまく表示できません。 *レコードが無いので、前のページに戻るリンクを表示したいのです 下は私なりに書いてみたのですが、if文にしない時はうまくいくのですが if文にすると、レコードが無い場合にだけ変数が表示しません。 **変数以外の部分は表示するので、分岐は出来てると思うのですが 変な事をしているのだと思いますが、色々やってみてもうまくいきません。 宜しくアドバイスをお願いいたしますm(__)m <?php require_once("dbini.php"); $con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD); $selectdb = mysql_select_db($DBNAME, $con); //1ページ当りの表示件数を設定します $PAGESIZE = 10; if (!isset($page)) { $sql = "select count(*) as cnt from テーブルA where genreno = $sgenreno"; $rst = mysql_query($sql, $con); $col = mysql_fetch_array($rst); $tcnt = $col["cnt"]; mysql_free_result($rst); $page = 1; } $totalpage = ceil($tcnt / $PAGESIZE); $pagehead = "$tcnt 件の登録があります。 " . "[" . ($PAGESIZE * ($page - 1) + 1) . "-"; if ($page < $totalpage) { $pagehead .= ($PAGESIZE * $page) . "] を表示しています</p>"; } else { $pagehead .= "$tcnt] を表示しています</p>"; } //1ページ分だけ抽出するSQL文を組み立てます $sql = "select * from テーブルA where genreno = $sgenreno order by id desc limit " . $PAGESIZE * ($page - 1) . ", $PAGESIZE";    $rst = mysql_query($sql, $con); //結果セットからデータを読み込みます while($col = mysql_fetch_array($rst)) { $genreno=$col["genreno"];  $genre=$col["genre"]; $sgenre=$col["sgenre"]; } //△△△△△△△うまくいかないのはこの部分△△△△△△△ if($tcnt == 0 ){ $navi .= "<a href='1setubi_search.php?genreno=$genreno'>【".$genre."】"."</a>"."【".$sgenre."】は登録がありません。" ; } else{ $navi .= "今表示しているのは<a href='1setubi_search.php?genreno=$genreno'>【".$genre."】"."</a>"."【".$sgenre."】です。" ; //↑この行はレコードがある場合は表示します } mysql_free_result($rst); //△△△△△△△うまくいかないのはこの部分まで△△△△△△△

    • ベストアンサー
    • PHP
  • 変数の比較

    <FORM action="<?php echo $PHP_SELF; ?>" method="POST" enctype="application/x-www-form-urlencoded"> <INPUT TYPE="HIDDEN" NAME="action" VALUE="post"> ユーザーID<INPUT TYPE="TEXT" NAME="u_id" SIZE="12"> パスワード<INPUT TYPE=password NAME="passwd" SIZE="12"> <INPUT TYPE="SUBMIT" NAME="Submit" VALUE="認証スタート"> <?php $DBSERVER ="hogehoge"; $DBUSER ="hogehoge"; $DBNAME ="hogehoge"; $DBPASSWORD ="hogehoge"; $con = mysql_connect( $DBSERVER , $DBUSER, $DBPASSWORD ); $selectdb = mysql_select_db($DBNAME,$con); if( $_POST['action'] == "post" ) { $id = $_POST['u_id']; $pass = $_POST['passwd']; $rst = mysql_query( "select * from UserInfo where name = '$id'", $con); print "<BR>"; print $id."<BR>"; print $pass."<BR>"; while( $col = mysql_fetch_row($rst) ) { print "<BR>"; print $col[0]."<BR>"; print $col[1]."<BR>"; print $col[2]."<BR>"; } } if( $pass == $col[2] ) { print "<BR>"; print "パスの一致<BR>"; }else{ print "パスが違います<BR>"; } ?> </FORM> 未だに判りません。 if( $pass == $col[2] )で 値が一緒でも、そうじゃなくても "パスの一致"が表示されます。 $pass = $_POST['passwd']; ちゃんと↑ので値は取得出来ているのは確認できており print $col[2]."<BR>"; で$passと違う文字列が入っていることも確認しましたが、パスの一致が表示されます。 再度の質問ですが、かなり困っています。 御教授お願い致します。

    • ベストアンサー
    • PHP
  • 入門書のPHPサンプル内で、MySQL関数を使いたい

    環境:PHP5.0.3+MySQL4.0.14です。PHPどころか、プログラムも素人です。 検索結果をHTML表に一覧化する仕組みを作っているのですが WHERE条件に合致した数値データを平均化したり、 WHERE条件合致した日付データの書式を【MySQL関数によって】加工したいです。 それぞれ、mysql.exe(DOS窓上)での書き方はわかったものの (SELECT AVG(HOGE1) WHERE (HOGE <= 1) のように)、 これをPHPに組み込んだ際ににどう使えばわからないです。 今回使っているPHP入門書のサンプルは以下の通りです。ここで mysql_fetch_arrayに格納されたテーブル(カラム)を取り出しているらしい ことはわかりますが、以下のサンプルで加工したい対象である $col["DATE1"]、$col["HOGE1"]を $col["date_format(DATE1, '%y/%m/%d')"] や $col["AVG(HOGE1)"]などと してもだめみたいです。 以下の例で、これらを取り出すにはどのように記述したらいいでしょうか。 よろしくお願い致します。 <?php require_once("dbini.php"); $con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD); $selectdb = mysql_select_db($DBNAME, $con); $sql = "select * from mytable"; $rst = mysql_query($sql, $con); $recmax = mysql_num_rows($rst); $body = "結果: $recmax 件"; $body .= "<table>"; for ($recnum = 0; $recnum < $recmax; $recnum++) { $col = mysql_fetch_array($rst); $body .= "<td>" . $col["DATE1"] . "</td>"; $body .= "<td>" . $col["HOGE1"] . "</td>"; $body .= "</tr>"; } $body .= "</table>\n"; mysql_free_result($rst); $con = mysql_close($con); ?> <html> <head></head> <body> <?= $body ?> </body> </html>

    • ベストアンサー
    • PHP

専門家に質問してみよう