• 締切済み

SQL文の実行に失敗しました???

すみませんが、お助けください。私は、PHPの初心者で現在猛特訓でマスター中です。よろしくお願いします。現在、本を購入し、そこに記述されている通りやってみているのですが、今まで上手くできていたのですが、ここの記述ではどうしてもエラーが出てしまいます。そこでお願いで投稿しました。 <利用環境> ・レンタルサーバー/ラピッドサーバー RV-310 ・MYSQL/MySQL 4.1.18 ・「動物名」と「動物の年齢」を入力する練習フォームとPHP ■php内容 insert.php ※フォームは文字数の関係で省略しました <?php // データベースへの接続情報を設定します。 $dbUser = "***"; $dbPass = "***"; $dbHost = "localhost"; $dbName = "***"; // フォームから送信されたデータを取得します。 $animal_c = $_POST['animal_c']; $age_c = $_POST['age_c']; // mysqli_escape_stringを使用してエスケープを行うため、 // magic_quotes_gpcがOnの場合、エスケープされた文字を元に戻します。 if( get_magic_quotes_gpc() ){ $animal_c = stripslashes( $animal_c ); $age_c = stripslashes( $age_c ); } // MySQLとの接続を行ないます。 $db = mysql_connect( $dbHost, $dbUser, $dbPass ) or die( "MySQL DBとの接続に失敗しました" ); // クライアントの文字コードセットをEUC-JPに変更します。 mysql_query( "SET NAMES ujis", $db ); // データベースを選択します。 mysql_select_db( $dbName, $db ) or die( "データベース" . $dbName . "との接続に失敗しました。" ); // エスケープ処理を行います。 // 数値が入る事が予測される値もエスケープ処理は必ず行います。 $animal_c = convSqlString( $animal_c ); $age_c = convSqlString( $age_c ); // SQL文を記述します。 // フォームより送信されたデータを追加します。 $query = "INSERT INTO zoo SET animal_c='$animal_c', age_c='$age_c'"; // SQL文を実行します。 mysql_query( $query, $db ) or die( "SQL文の実行に失敗しましたbbbbb" ); // SQL文に使用するための文字列をエスケープする関数です。 function convSqlString( $string ){ global $db; // SJISでは2バイト目にメタ文字\のコード(0x5c)を含む場合に、 // このコードもエスケープしてしまうので、 // EUC-JPに変換してエスケープします。 // Linuxでの実行などファイルをEUC-JPにエンコードした場合には // コメントアウトしてください。 // $string = mb_convert_encoding( $string, "EUC-JP", "SJIS" ); // mysqli_escape_stringを使うことにより、 // 'や\などが適切にエスケープされます。 // MySQLのバージョン4.1.2未満を使用している場合は、 // 下の1行を$string = mysql_escape_string( $string ); // に変更してください。 $string = mysql_escape_string( $string ); // 再度SJISに変換して返します。 // Linuxでの実行などファイルをEUC-JPにエンコードした場合には // コメントアウトしてください。 // $string = mb_convert_encoding( $string, "SJIS", "EUC-JP" ); return $string; } ?> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=EUC-JP"> <title>PHPサンプルスクリプト</title> </head> <body bgcolor=#FFFFFF> データを追加しました。 </body> </html> <? // データベースから切断します。 mysql_close( $db ); ?> ■エラー内容(ブラウザ表示) SQL文の実行に失敗しましたbbbb でエラー構文が出てしまいます。 もしお分かりの方がいればアドバイスいただければ幸いです。

  • PHP
  • 回答数2
  • ありがとう数4

みんなの回答

  • gogo-tea
  • ベストアンサー率75% (25/33)
回答No.2

$queryの部分を $query = "INSERT INTO zoo VALUES('" . $animal_c . "','" . $age_c . "');"; echo $query; exit; とかにして、 ・SQLに変数がきちんとした形で入っているか ・INSERT文として成り立っているか を確認してみたらいかがでしょうか。

hhc02331
質問者

お礼

大変参考になりました。 ・SQLに変数がきちんとした形で入っているか ・INSERT文として成り立っているか など確認がひとつひとつ大切なんですね。 おかげさまでできました。 しかし、実は、できなかった原因は、MYSQLへのIDログインが完全ではなかったのが理由のようです。 お騒がせしましてありがとうございました。

回答No.1

> INSERT INTO zoo SET animal_c='$animal_c', age_c='$age_c INSERT INTO zoo (animal_c, age_c) values($animal_c, $age_c) では? INSERT文の普通の構文はこれですが?

hhc02331
質問者

お礼

ありがとうございます。 助かりました。今まで知らなかった構文が勉強になりました。 実際に置き換えてやってみました。 しかし残念ながらだめでした。 この時点でのエラーは、DB上でINSERTの権限がないからでしょうか? 本当にすみません。

関連するQ&A

  • sql文の書き方

    いつもこちらで勉強させていただきます。 環境:mysql5.0 PHP5.1.4 apache 2.0.58 いま画面からパラメータ5受け取りました。 これをもってsql文を書こうとするが必須入力項目ではないため一つずつ判断して書いたら30種類の可能性がでてきてすごく長くなってしまいましたがなんか短縮させるいい方法はありませんか?またこれをファンクションで作り直そうとしたらちょっとうまくいかないのでどなたか教えてもらえませんか?ファンクションで渡すパラメータ($sql?$query?あるいは各パラメータですか? )は何にすればいいか?取得したい検索結果は配列です。ファンクション戻り値を連想配列にすることは可能ですか?ちょっと困っています。 $sql = "SELECT * FROM file_tbl WHERE"; // A だけの場合 if ( $b == "" and $c == "" and $d=="" and $e==""){ $sql = $sql." a='%s' order by b DESC,a"; $query = sprintf("$sql", mysql_real_escape_string($a)); // B だけの場合 }else if( $a == "" and $c == "" and $d=="" and $e==""){ $sql = $sql." b >='%s' order by b DESC,a"; $query = sprintf("$sql", mysql_real_escape_string($b)); // Cだけの場合 }else if( $a == "" and $b == "" and $d=="" and $e==""){ $sql = $sql." c <='%s' order by b DESC,a"; . . . // SQL クエリを実行する $result = mysql_query($query); よろしくご教授願います。

    • ベストアンサー
    • MySQL
  • mysqlのinsert文について、ご指導をお願いいたします。

    はじめまして。 プログラミング初心者です。 現在、PHP&MySQLで会員制掲示板を制作しようと奮闘しております。 会員登録フォームを作成し、下記SQL文にて会員登録を行おうとしているのですが、「エラーは出ていないのに、DBにデータが登録されない。」状況で、なにがおかしいのかわからず非常に困っております。尚、DBには正常に接続されています。 環境はVISTAにXAMPPを入れております。 私、PHP初心者のため、本のサンプルソースを加工して使用しようとしています。 下記にソースを記載いたしますので、 どうかご指導のほどお願いいたします。 (※情報が不足しておりましたら申し訳ありません。必要な情報をお教えいただけましたら幸いです。) // 接続 $link = mysql_connect( $db_host, $db_user, $db_password ); mysql_select_db( $db_name ); $result = mysql_query( 'set character set utf8' ); $sql = "select email1 from users where email = '" . mysql_real_escape_string( $_POST['email'] ) . "'"; $result = mysql_query( $sql ); // if ( $error != '' ) exit; // 会員データの挿入 $sql = "insert into member ( login_id, passwd, register_date, nickname, sex, birthday, email, pref, division, state ) values ( '" . mysql_real_escape_string( $_POST['email'] ) . "', '" . md5( $_POST['passwd'] ) . "', '" . date( 'Y-m-d H:i:s' ) . "', '" . mysql_real_escape_string( $_POST['nickname'] ) . "', '" . mysql_real_escape_string( $_POST['sex'] ) . "', '" . mysql_real_escape_string( $_POST['year'] . '-' . $_POST['month'] . '-' . $_POST['day'] . ' 00:00:00' ) . "', '" . mysql_real_escape_string( $_POST['email'] ) . "', '" . mysql_real_escape_string( $_POST['pref'] ) . "', '" . mysql_real_escape_string( $_POST['division'] ) . "', '1' )"; $result = mysql_query( $sql ); //echo $sql; // $title = '会員登録[3/4]'; ?>

    • ベストアンサー
    • PHP
  • MySQL5のデータを、SQL文を使いcsv形式でダウンロードさせると文字化けします

    環境:Apache2&PHP5&MySQL5 MySQL5のデータを、SQL文を使いcsv形式でダウンロードさせると文字化けします。 -- <?php header("Content-Type: application/octet-stream"); ?> <?php header("Content-Disposition: attachment; filename=output.csv"); ?> <?php $srv = "localhost"; // サーバー名 $id = "root"; // ユーザーID $passwd = "******"; // パスワード $dbn = "sample"; // データベース名 $sql = "SELECT * FROM result"; // SQL文 $db=mysql_connect($srv,$id,$passwd); mysql_select_db($dbn,$db); $rs=mysql_query($sql,$db); for($i=0; $i<mysql_num_fields($rs); $i++){ print(mb_convert_encoding(mysql_field_name($rs,$i),"SJIS","EUC-JP").","); } print("\n"); for($j=0 ;$j<mysql_num_rows($rs); $j++) { for($k=0; $k<mysql_num_fields($rs); $k++) { $str=mysql_result($rs,$j,$k); print(mb_convert_encoding($str,"SJIS","EUC-JP").","); } print("\n"); } mysql_close($db); ---ダウンロードしたCSVは半角英数文字はそのまま出ますが、 日本語(全角)が、?に化けます。(下記の参照してください) 24 2 1 444 4444 2008/7/3 15 ? 1E+18 ??? ????? ?????? 25 2 1 444 kojiide 2008/7/3 30 ? 1E+18 ??? ????? ?????? 26 2 1 444 kojiide 2008/7/3 30 ? 1E+18 ??? ????? ?????? --- print(mb_convert_encoding($str,"SJIS","EUC-JP").","); でSJISになっていると思うのですが、どなたかアドバイスいただけると幸いです。

    • ベストアンサー
    • PHP
  • ASP(VBScript) & SQL Server でのエスケープ処理

    現在、 ASP(VBScript) & SQL Server で開発しております。 PHP & MySQL では 文字列型:mysql_escape_string 数値型:intval PHP & PostgreSQL では 文字列型:pg_escape_string 数値型:intval ですが、 ASP(VBScript) & SQL Server にはそのような関数がありますでしょうか? ない場合は自作しなければならないのですが、 エスケープする文字は「'」のみで大丈夫でしょうか? ご教授いただければ幸いです。

  • SQL Injection対策はこれで十分?

    データベースにMySQLを使用しています。SQL Injection対策を行いたいのですが、以下の方法で十分防ぐことができるのでしょうか? <?php $hoge = $_GET['ok']; $sql = "select * from ok where user = '".mysql_real_escape_string($hoge)."';"; $res = mysql_query($sql ....... ?> よろしくお願いします。

    • ベストアンサー
    • PHP
  • php5,MySQL5で文字化けが起こる

    環境:php5,MySQL5,XP MySQL5は、インストール時にsjisを指定。 php.iniもmbstring.internal_encoding = SJIS ドスプロンプトでSelect文を発行すると漢字で表示されます。 $dbtype = "mysql"; $sv = "localhost"; $dbname = "*****"; $user = "root"; $pass = "*****"; // 文字コード $enc_disp = "EUC-JP"; $enc_db = "EUC-JP"; // データの文字コードを変換する関数 function cnv_enc($string, $to, $from) { // 文字コードを変換する $det_enc = mb_detect_encoding($string, $from . ", " . $to); if ($det_enc and $det_enc != $to) { return mb_convert_encoding($string, $to, $det_enc); } else { return $string; } } // データベースに接続する $dsn = "$dbtype://$user:$pass@$sv/$dbname"; $conn = DB::connect($dsn); $sql = "SELECT * FROM A"; $res = $conn->query($sql); →この後、SQLの内容をIEで表示させると ”2 Web?? 002 ??????????????”の様に テーブルの中の漢字の部分だけが??????で表示されます。 ヒント、参考になるサイトなど、教えていただけると幸いです。

    • ベストアンサー
    • PHP
  • SQL文のSyntaxエラー

    お世話になります。 以下のSQL文でSyntaxエラーが出てしまい、考えても考えてもエラーが出続けているので「どこでエラーが発生して、訂正したSQL文」をご教授いただければ幸いです。 $sql="insert into 'post' ("name","comment","created_at") values ('" . mysql_real_escape_string($name) . "','" . mysql_real_escape_string($comment) . "','" . date('Y-m-d H:i:s') . "')"; PHP内でのSQL文です。参考にしたのは技術評論社「パーフェクトPHP」p.190です。 以上、よろしくお願いします。

    • 締切済み
    • PHP
  • php5+Mysql5による条件検索とその表示方法が上手く動作しないのでどなたかご指摘をお願いします。

    phpにて条件検索を行っているのですが、『where』以下を$変数にすると動かなくなってしまいます。記述部分で何が間違っているのでしょうか? 以下記述↓ <? $link = db_con(); //←DB接続 $sql = "select * from tbl where id = '" . mysql_real_escape_string( $_GET['id'] ) . "' and name like '%" . mysql_real_escape_string( $_GET['name'] ) . "%' "; $result = mysql_query( $sql ) ; $num_rows = mysql_num_rows( $result ); ?> ここまで↑ を下記のように『where』以下を$変数にして代入 $変数した場合↓ <? $where .= "id = '" . mysql_real_escape_string( $_GET['id'] ) . "' and name like '%" . mysql_real_escape_string( $_GET['name'] ) . "%' "; $link = db_con(); //←DB接続 $sql = "select * from tbl where $where "; $result = mysql_query( $sql ) ; $num_rows = mysql_num_rows( $result ); ?> ここまで↑ どなたかご指摘をお願いします。

  • PHP,MYSQLで検索が出来ません。sjis→ euc→sjis。

    apache 1.3.34 mysql 4.0.26 php 4.4.2 で運用しています。 HTML 入力 sjis → DATA sjis →読み出し sjis で運用していたのですが、文字化けのおかげで データを EUC にしました。 HTML(入力)sjis→EUC→HTML(読み出し)sjis に変更しました。 参考書を頼りに、変換しながらやっているのですが データが漢字(ひらがなも同じかも)の場合に検索が出来ません **他はうまくいっています***入力、表示ともに 入力時 function cnv_dbstr($string) { $string = htmlspecialchars($string); $string = mb_convert_encoding($string, "EUC-JP", "SJIS"); if (!get_magic_quotes_gpc()) { $string = addslashes($string); } return $string; } 出力時 function cnv_dispstr($string) { $string = mb_convert_encoding($string, "SJIS", "EUC-JP"); $string =nl2br($string); return $string; } 今までは下記のsqlで出来ていたのですが、この福岡市を cnv_dbstr(福岡市) にしてみたりしたのですが検索が出来なくて データが出てきません。 $sql = "select * from mem where area = 1 and cate = '福岡市'" ; $rst = mysql_query($sql, $con); どなたか、アドバイス宜しくお願いいたします。

    • ベストアンサー
    • MySQL
  • PHPのSQLインジェクションはsprintf?

    PHPのSQLインジェクションですが、sprintf内でクォートをしてあるとそれで大丈夫なのでしょうか? 以下のようなコードがあり、nameは画面入力なのでSQLインジェクションが起こるのでは? と作成者に確認したところ、"%s"してあるから大丈夫との返事をもらいました。 ネット調べるとmysql_real_escape_stringでエスケープしてから"%s"で変換すれば大丈夫といった内容は見つけたのですが、mysql_real_escape_stringなど不要との返事をもらいました。 なぜ?と聞くとそういうものだとしか回答がありません。 sprintf('UPDATE users SET name = "%s" WHERE id = %d', name, id); 結局上記のコードでSQLインジェクションは解消されているのでしょうか?

    • ベストアンサー
    • PHP