• 締切済み

insertができない。

insertができない。 はじめまして。PHPとDBについて質問です。 マニュアルなどを読んでいろいろといじっていたのですが、どうにもうまくできません。 詳しい方どうかお助け願います。 現在、任意のサイトからHTMLソースを取得して、それをDBに書き込みたいと考えています。 しかしプログラムを動かすと 「You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'varXYZ' + (varA1)); varABC = ('varP' + (varA1)); if( document.getElementById )' at line 1」のようなエラーが発生します。 プログラムソースはこんな感じです。 _________________________ $url = "http://www.sample.com/"; $html = file_get_contents($url); $source = htmlspecialchars($html); echo $source; ~~~または~~~ $lines = @file($url); foreach( $lines as $source_num => $source ) { $array[] = htmlspecialchars($source); } echo "<pre>"; print_r($array); echo "</pre>"; ~~~~~~~~~ 上記のようなプログラムでソースの取得はできました。 あとは単純にinsertしているのですが。 $sql = "INSERT INTO テーブル名 (source) VALUES ('$source')";  sourceの種別はtextにしてあります。 さきほどのエラーがでて、insertができません。 いろいろ検索して、serializeとかを使うのかな?とも思ったのですが、 いまだに解決には至っておりません。 どうかよろしくお願いいたします。 環境 Windows7 Apache 2.0.63 PHP 5.2.6 Mysql 5.0.51b Smarty 2.6.19 SQLite 3.5.9 PhpMyAdmin 2.11.7 SQLiteManager 1.2.0 ZendOptimizer 3.3.3

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

みんなの回答

  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.2

とりあえず、エスケープはしたほうがいいと思います。 mysql なら ↓これ。 http://php.net/manual/ja/function.mysql-real-escape-string.php

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

文法エラーですから単純にprint $sql;をデバッグで見てみればわかるのでは?

hyuthe
質問者

補足

yambejp様 早速のご回答ありがとうございます。 文法エラーなのは、わかるのですが解決できなかったので質問させていただきました。 とりあえず、base64を使うことにより、暫定的に解決いたしました。 しかし、他にもいい方法があると思うので、回答はまだ募集いたします。 よろしくお願いいたします。

関連するQ&A

  • 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できないのです。 もう何時間も悪戦苦闘しております。 どなたかご指導よろしくお願いいたします。

  • MYSQLにINSERTできません。

    見よう見まねでやっている超初心者です。 恥を忍んで質問させて頂きます。 古いPHP(2003年ごろ)関連書籍に下記のような include.phpファイルがあるのですが、DB接続失敗、クエリ発行エラー等の エラー表示は出ないのですが(65行目位の、管理者パスワードチェック : _chkPass)でパスワードがMYSQLにINSERTできません。 PHPバージョンの違いなのでしょうか(私のはPHPV5 XAMPPです。) 色々試したりMYSQLの確認をしたのですが、どこがイケないのか、 どこをどう直したらいいのか全く分かりません。 このプログラムに不具合は無いのか?あったとしたらどう直したら動くようになるのか? わかる方どうかご教授の程よろしくお願い致します。 具体的にご教授頂けると大変助かります。 <?php putenv("TZ=JST-9"); define( "_DB_SERVER", "localhost"); define( "_DB_NAME", "cgiweb" ); define( "_DB_UID", "root" ); define( "_DB_PASS", "" ); //--------------------------------------------------------- // DB接続 : _dbConnect //--------------------------------------------------------- function _dbConnect(){ //DB接続 $_conn = mysql_connect( _DB_SERVER, _DB_UID, _DB_PASS) or die('DB接続失敗 = ' . mysql_error()); //DB選択 mysql_select_db( _DB_NAME, $_conn) or die('DB選択失敗 = ' . mysql_error()); return( $_conn ); } //--------------------------------------------------------- // DB切断 : _dbDisconnect //--------------------------------------------------------- function _dbDisconnect( $_conn ){ //DB切断 mysql_close($_conn); } //--------------------------------------------------------- // クエリ発行 : _query //--------------------------------------------------------- function _query( $_conn, $_query ){ $_result=mysql_query($_query,$_conn) or die('クエリ発行エラー = ' .mysql_error()); return( $_result ); } //--------------------------------------------------------- // FETCH実行 : _fetchArray //--------------------------------------------------------- function _fetchArray( $_result ){ $_row = mysql_fetch_array($_result,MYSQL_ASSOC); return( $_row ); } //--------------------------------------------------------- // 結果セット開放 : _freeResult //--------------------------------------------------------- function _freeResult($_result){ mysql_free_result($_result); } //--------------------------------------------------------- // 管理者パスワードチェック : _chkPass // 引数:コネクション // チェック対象パスワード // 戻値:_OK or _NG //--------------------------------------------------------- function _chkPass( $_conn, $_input_pass ){ $_err_str = ""; if( ! $_input_pass ){ //パスワード未設定なら入力画面を表示 $_err_str = "パスワードを入力してください"; } else{ //パスワードがあるなら店舗マスタの内容と比較 $_result = _query( $_conn, "SELECT tenpo_pass FROM tenpo_mst" ); $_row = _fetchArray( $_result ); if( $_row ){ //レコードがあればチェック if( $_input_pass != $_row['tenpo_pass'] ){ //認証NGなので、入力画面を再表示 $_err_str = "パスワードが誤っています"; } }else{ //レコードがなければ入力されたパスワードでレコード作成 $_sql = ""; $_sql .= "INSERT INTO tenpo_mst ("; $_sql .= " tenpo_name,"; $_sql .= " tenpo_pass,"; $_sql .= " zei_kbn,"; $_sql .= " zeiritsu,"; $_sql .= " zei_kirisute_kbn,"; $_sql .= " order_status"; $_sql .= " ) VALUES ("; $_sql .= " '',"; $_sql .= " '" . addslashes($_input_pass) . "',"; $_sql .= " 2,"; $_sql .= " 0,"; $_sql .= " 0,"; $_sql .= " 0"; $_sql .= " )"; _query( $_conn, $_sql ); } _freeResult( $_result ); } //入力画面表示の場合 if( $_err_str != "" ){ echo "<HTML>\n"; echo "<HEAD>\n"; echo "<TITLE>管理者認証</TITLE>\n"; echo "</HEAD>\n"; echo "<BODY>\n"; echo "<CENTER>\n"; echo "<FONT COLOR=RED SIZE=5>管理者認証</FONT>\n"; echo "<HR>\n"; echo "${_err_str}<BR><BR>\n"; echo "<FORM ACTION=\"mnt_menu.php\" METHOD=\"POST\">\n"; echo "<FONT COLOR=RED SIZE=2>※記号を除く半角小文字8文字以内</FONT><BR>\n"; echo "パスワード:<INPUT TYPE=\"password\" NAME=\"post_pass\" MAXLENGTH=8>\n"; echo "<INPUT TYPE=\"submit\" VALUE=\"送信\">\n"; echo "</FORM>\n"; echo "<HR>\n"; echo "</CENTER>\n"; echo "</BODY>\n"; echo "</HTML>\n"; _dbDisconnect($_conn); exit; } } ?> 以下省略しました。

    • ベストアンサー
    • PHP
  • insertでのエラーについて

    お世話になります。 アップロードしたバイナリデータを変数に入れて、それをinsertしているのですが、DBに入りません。 テーブルでは、data mediumblob not nullと設定しています。Perlスクリプト内で、次のように書いています。 $sql="insert into data_tbl(data)"; $sql.="values('" . $datafile . "')"; 上記の$datafileにバイナリデータが入っています。 このようにして実行しているのですが、You have an error in your SQL syntax. とエラーになりDBに格納できません。ご教授よろしくお願いします。

  • php mysql INSERT

    mysqlのデータ登録の際に値が空だとエラー文が表示されてしまいます。 エラー文は You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 にでます。 なお、mysqlのバージョンは5.1です。 試行錯誤で試したのですが、なかなかできないためわかる方がいましたら宜しくお願いします。 ソースは foreach((array) $test1 as $key => $val){ if($val !== "" && $test2[$key] !== "") { $vals .= ","; $vals .= "('$val','$test2[$key]')"; } } if($vals !== "") { $vals = trim($vals,','); $testQuery = sprintf("INSERT INTO `home_scorer` (`test1`,`test2`) VALUES" .$vals); $testResult = mysql_query($testQuery, $link) or die(mysql_error()); } test1 と test2に値が入っていれば登録はさせるのですが、値が入っていないときはINSERTしない状態にできればと思います。 宜しくお願いします。

    • 締切済み
    • PHP
  • functionの外にある{$myrow["url"]}をfunction内で使いたいです

    <?php $box_template .=<<<eof <a href="{$myrow["url"]}" rel="nofollow"> <img src="{$myrow["image1"]}" width="157" /><img src="{$myrow["image2"]}" width="100" /> </a> eof; mysql_db_read($mysql_query,$box_template); function mysql_db_read($mysql_query,$box_template){ $db = mysql_connect("*******","****","****"); mysql_select_db("******",$db); $result = mysql_query($mysql_query,$db); if ($myrow = mysql_fetch_array($result)) { do { $myrow["url"] = htmlspecialchars($myrow["url"]); $myrow["image1"] = htmlspecialchars($myrow["image1"]); $myrow["image2"] = htmlspecialchars($myrow["image2"]); print $box_template; } while ($myrow = mysql_fetch_array($result)); } else { echo "error"; } }//function ?> $box_templateの{$myrow["url"]}などにmysqlから取ってきたデータを適用したいのですが、{$myrow["url"]}に値が入ってくれません。 どうすればいいのでしょうか。 教えてください。よろしくお願いします。m(_ _)m

    • 締切済み
    • PHP
  • INSERTできない

    お世話になります。 PHP4.3+Windows版Postgres8.0で構築中です。 ものすごく一般的なinsert文 $sql="INSERT INTO dic (id,word,mean,hi) VALUES('$id','$word','mean','$hi')"; $result=pg_exec ($dbcon, $sql); とすると、 array value must start with "{" or dimension information と怒られてしまいます。 配列は{で始めよってことなのでしょうか。 配列でのinsert方法ってよくわからないのですが、そういう方法があるのでしょうか。 pgAdminの使い方があまりわからなくて、いいかげんな設定になっているためこんなエラーが出てしまうのかとも思うのですが、どこか確認箇所等ありましたらご指摘いただければと思います。 もう半日潰してしまいました。。。(涙 コマンドラインからも同様のエラーが返ります。 #ちなみにMySQLで動いていたものをPostgresに移植中で、プログラムには間違いない・・・と思います。 よろしくお願いいたします。

  • PHPでの不思議なふるまいが理解できません。MySQLのデータ照合

    PHPでユーザーにURLでパラメーター付メールを送り、そのURLをクリックするとMySQLに保存されているユーザー名「hoge」というレコード内のsignという項目の値が0なら1にするというプログラムを書いています。 phpadminでsignが0なのを確認しているのに、URLをクリックしてプログラムを走らせると、//■■■■(3)■■■■の場所で終わってしまいます。(つまり0だと認識されていない?)その場合、echo $pass;の表示はなぜか1です。 echo $pass;は、//■■■■(2)■■■■のsignを1にする前の処理なのになぜ前もって1となるかが分からない点です。 そこでコメントされている■■■■(1)■■■■のexit;を、コメントアウトさせてからプログラムを走らせるとecho $pass;の表示は0です。 この現象が分かる方は教えて欲しいです。 宜しくお願いします。 //(これより以前省略) $db = mysql_connect($db_host,$db_user,$db_passwd); $sql = "select * from $db_table where username like 'hoge'"; $result = mysql_query($sql) or die("SQLに失敗しました".mysql_error()); //■■■■MySQLに保存されているデータを抜き出し $row = mysql_fetch_array($result); $sign = $row{'sign'}; $pass = $row{'password'}; echo $pass; //■■■■メールに書いてあるクリックされたURLの分解 $a = explode('&', $_SERVER['QUERY_STRING']); $urlpass = split('=', $a[1]); //exit;//■■■■(1)■■■■ if ( $sign == 0 ){ if ( $urlpass == $pass ){sign $sql = "update $db_table set sign = 1 where username like 'hoge'";■■■■(2)■■■■ $result = mysql_query($sql) or die("SQLに失敗しました".mysql_error()); if ($result){ echo"認証できました。"; } }else{ echo"認証できません。"; } }else{//$signが0以外なら echo"認証済みです";//■■■■(3)■■■■ }

    • ベストアンサー
    • PHP
  • 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
  • PHP/mySQLでインサートができません。

    PHPとmySQLを勉強中の初心者ですが、よろしくお願いします。 PHPで簡単なインサート文を作ってそれをmySQLに保存しようとしているのですが、以下のエラーが出てしまいます。 Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource プログラムは以下の通りです。HOSTNAME,USERNAME,DBPWDは別のところで定義していますが、mysql_connect, mysql_select_dbではエラーにならないので、データベースの選択まではうまく行っていると思うのですが。 $conn = mysql_connect(HOSTNAME, USERNAME, DBPWD); if(!$conn){ die("Logon Failure to mysql Server."); } $db = mysql_select_db(DBNAME, $conn); if(!$db){ die("Cannot access to the DB"); } foreach($csv_ary as $a => $b) { $query = "INSERT INTO TEST field_a VALUES $a"; if (!mysql_query($query, $db)){ echo "更新失敗: SQL=$query<br>"; } } mysql_close($conn); field_aはvarchar(10)でPrimary_key, NOT NULLの設定です。 Foreachで展開した配列の値はちゃんと長さ10の文字列が入っています。 PHP 4.3.11は mySQL 4.0.27です。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 別テーブルからselectした値を他のテーブルにinsertしたいのですが、上手くできません

    以下のように行ったのですが、 全ての値が別テーブルにinsertされません。 $sql = "SELECT tbl_A.id, tbl_A.data FROM tbl_A "; $rst = mysql_query( $sql ); while ( $col = mysql_fetch_array( $rst ) ) { $sql = "INSERT INTO tbl_B (          date, id, data ) VALUES ( '" . date( 'Y-m-d' ) . "', '" . mysql_real_escape_string( $col['id'] ) . "', '" . mysql_real_escape_string( $col['data'] ) . "' )"; } このやり方では、テーブル内の1つの値しかinsertされません。 selectされた全ての値をinsertするにはどのようにしたら良いのでしょうか? よろしくお願いします。 DB:mysql5 SP:php5

    • ベストアンサー
    • MySQL

専門家に質問してみよう