mySQLのエラー

このQ&Aのポイント
  • 現在、TwitterのAPIを使って特定の@を含むツイートをmySQLに保存しようとしています。しかし、SQL文がエラーとなってしまいます。
  • エラーメッセージは「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 'http://twitter.com/kenichiromogi">kenichiromogi:"でこ(3)子どもは' at line 1」となっています。
  • DBへの接続は正常に行えているため、おそらくSQL文の記述に問題があります。
回答を見る
  • ベストアンサー

SQL文のエラー

現在、TwitterのAPIを使って特定の@を含むツイートをmySQLに保存しようとしています。 そこで、 <?php mysql_connect("*********","*********","********")or die(mysql_error()); echo "データベースに接続しました"; mysql_select_db("********")or die(mysql_error()); echo "<br/>データーベースを選びました"; $feed=file_get_contents("http://search.twitter.com/search.atom?q=%40kenichiromogi"); //XMLパース $sxml=simplexml_load_string($feed); //パースしたものから、必要なものだけぶっこ抜く。 $i=0; while($i<=10){ $tabeta=$sxml->entry[$i]->content; $zikan=$sxml->entry[$i]->updated; $hito=$sxml->entry[$i]->author->name; //本文のUTF-8化 $utf8_tabeta=mb_convert_encoding($tabeta,"UTF-8","SJIS"); //参照文字化 $utf8_tabeta=mb_eregi_replace("\"",'"',$utf8_comment); // テーブルにレコード追加 mysql_query('INSERT INTO テーブル名 SET TIME="'.$zikan.'",NAME="'.$hito.'",COMMENT="'.$tabeta.'"') or die(mysql_error()); echo "データを挿入しました"; $i++; } ?> というプログラムを書いてみたのですが、 結果は データベースに接続しました データーベースを選びました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 'http://twitter.com/kenichiromogi">kenichiromogi: でこ(3)子どもは' at line 1 というエラーが出てしまいます。 mySQLでは、以下のようなフィールドを作りました。 フィールド 種別 照合順序 属性 ヌル(NULL) デフォルト値 その他 操作 TIME    int(10)  UNSIGNED いいえ auto_increment NAME text utf8_general_ci いいえ COMMENT text utf8_general_ci いいえ どこが悪いのでしょうか? DBへの接続はできているので、おそらくSQL文がおかしいのだと思いますが、よくわかりません。 よろしくお願いします。

  • MySQL
  • 回答数1
  • ありがとう数3

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

  • ベストアンサー
  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.1

mysql_query('INSERT INTO テーブル名 SET TIME="'.$zikan.'",NAME="'.$hito.'",COMMENT="'.$tabeta.'"') or die(mysql_error()); の手前で、 echo 'INSERT INTO テーブル名 SET TIME="'.$zikan.'",NAME="'.$hito.'",COMMENT="'.$tabeta.'"' を挿入して、出てきた結果を確認してみたらどうでしょう。 文法的に誤りのあるSQL文になっているはずです。 以下は推測ですが、 http://twitter.com/kenichiromogi">kenichiromogi: でこ(3)・・・ となっている手前に'が含まれていて、 ・・・COMMENT='・・・'http://twitter.com/kenichiromogi">kenichiromogi: でこ(3)子どもは ・・・ となっていて、httpの前で文字列が終了しているのではないかと思います。 ## 他のところかもしれません。 ## 他のところなら以下は無視してください。 ・・・この場合ならば、'をエスケープする必要あります。 MySQLで'を文字列中に指定したいときのエスケープ方法は、\' のようです。 http://dev.mysql.com/doc/refman/4.1/ja/string-syntax.html より。 ということで'を\'に置き換える関数を使えば対応できるはず。 (PHPは私はわからないので調べてください。)

zinn2387
質問者

お礼

ありがとうございます。 教えて頂いたとおり、文法を見なおしたら動くようになりました!

関連する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にSQLを実行できない

    こんにちは。 今MySQLを勉強中なのですが、以下のようなエラーが解決できずに困っています。 どなたかお助けよろしくお願いいたします。 状況と致しまして、 レンタルサーバーにphpMyAdminを設置し 管理者に与えられたデータベースに「MLB」というテーブルを作成(特権なし)しました。 そこで以下のような単純なphpを組んで読み込んで見ることにトライしたのですが <?php //サーバーに接続 $my_Con = mysql_connect("localhost","データベース名","パスワード"); if($my_Con == false){ die("MYSQLの接続エラー"); }else{ echo "接続成功<br>"; if(mysql_select_db("データベース名",$my_Con)){ echo "データベースにアクセス成功<br>"; $my_Row = mysql("SELECT * FROM MLB",$my_Con); if(!$my_Row){ die(mysql_error()); } while($row = mysql_fetch_array($my_Row)){ echo $row["id"]; echo $row["stadium"]; echo "<br>"; } }else{ die("データベースへのアクセスエラー"); } } ?> 以下のようなエラーが出てしまい解決できない状態です。 接続成功 データベースにアクセス成功 Access denied for user 'データベース名'@'localhost' to database 'SELECT * FROM MLB' これは特権なしが影響しているのかな?とも考えたのですが、 調べてみた所、 _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ root で接続をしようとする場合に、次のようなエラーが出るときには、'root' の User フィールドに、user テーブルのエントリがないことを示します。そのため、mysqld がクライアントのホスト名を識別できない状態です。 Access denied for user ''@'unknown' to database mysql この場合、--skip-grant-tables オプションでサーバを立ち上げ、/etc/hosts ファイル、または \windows\hosts で、ホストのエントリを付加します。 _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ 解決になるらしいのですが、これはレンタルサーバー側に何か問題があるということでしょうか? どのように解決すればよいか、どなたかご教授をよろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • phpのデータベースを使用したsqlのエラー

    すみません、PHPでデータベースを読み込み、SQLにて処理するプログラムを作成しているのですが、 再びエラーで止まってしまいまして、困っています。 データベースへのアクセスはできたようなのですが、SQLの処理の部分がエラーになっているのだと思われます。 --------------結果表示-------------- Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\site\search_criteria.php on line 70 @ エラー番号 : 1064メッセージ : 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 'aaa,bbb,ccc FROM `test_table`' at line 1 @ ------------------------- -----------ソース------------- <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <title>-サイト -検索条件入力ページ-</title> </head> <body> <p>検索条件を入力してください</p><br> <?php # 変数定義関連 # mysqliの定義 global $mysqli; $mysqli = new mysqli('localhost', 'root', "", "****_db"); $link = mysql_connect('localhost', 'root', "", "****_db"); header("Content-type: text/html; charset=shift-jis"); // 文字化け防止 /* 文字セットを utf8 に変更します */ if (!$mysqli->set_charset("utf8")) { printf("処理1:文字コードのセットに失敗しました。: %s\n", $mysqli->error); } else { printf("処理1:文字コードセット-> %s\n", $mysqli->character_set_name()); } printf("<BR><BR>"); #配列定義 $job_name = array("配列定義"); $data = $_GET["job_opening_type"]; //データベースへの接続 if (!$link) { die("処理2:データベースへの接続失敗です。<BR>".mysql_error()); }else{ print("処理2:データベースへの接続成功!<BR><BR>"); } //データベースを選択 if (!mysql_select_db("****_db",$link)){ echo "処理3:データベース選択失敗<BR><BR>"; exit; }else{ echo "処理3:データベースの選択成功です。<BR><BR>"; } $query = file_get_contents("create.sql"); printf("処理4:クエリ->%s",$query); //SELECT文を実行 if($res = mysql_query($query,$link)){ echo "<BR>mysql_query失敗<BR>"; }else{ echo "<BR>mysql_query成功<BR>"; } //検索した結果を全部表示 line 70辺り→while($row = mysql_fetch_array($res,MYSQL_BOTH)){ echo "****=".$row["****"]; echo "****=".$row["****"]; echo "<BR>"; } echo "<BR>@<BR>エラー番号 : " . mysql_errno() . "メッセージ : " . mysql_error() ."<BR>@"; //データベースから切断 $mysqli->close(); echo "<BR><BR>処理5:データベースを切断しました。<BR>"; ?> <br> --------------------------------------------------<br> 最終更新日時<br> <p>&nbsp;</p> </body> </html> 内部のプログラムではなく、外部から読んでいるSQLの問題なのでしょうか? 外部にcreate.sqlというテキストを作成し、 SELECT aaa,bbb,ccc FROM `test_table` としています。 色々試しているのですが、うまくいきません、解決方法を教えて頂きたいです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • WHILEで取り出しループ中にさらにSQL文を入れたいです。

    こんばんは。 いつもお世話になっております。 またはまってしまったみたいで、どうにもわからなく なってしまいました。 どうかご指導よろしくお願いいたします。 使用環境はPHP5+Apche+MySQL4.0です。 2つのテーブルから【一覧リスト】というページを作って mysq_fetch_array関数で、行をループで呼び出しました。 ここまでは出来たのですが、取り出したキー情報を もとに、別テーブルの情報(文字列)を取り出したい のです。 以下、試してみたコードです。 //SQL発行 $rs = mysql_query("select * from uriage", $conn); //1件ずつ取り出すループ while( $rec = mysql_fetch_array( $rs, MYSQL_ASSOC)){ echo "<tr>"; echo "<td>".$rec['oder_no']."</td>"; $sql = "(select*from syouhin where syouhin_id = '".$rec["syouhin_id"]."')"; $res = mysql_query($sql); $rows = mysql_fetch_array($res); echo $rows["syouhin_name"]; echo "<td>".$rec['siiresaki']."</td>"; echo "<td>".$rec['tanka']."</td>"; echo "</tr>"; } Parse error: syntax error, unexpected T_ECHO というエラーが返ってきています。 エラーの行数はecho $rows["syouhin_name"]; の部分です。 何が悪いのかすら判らなくて…。 どうか、ご指導よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • SQL文を一気に入力したい

    データベースに今までのデータを入れるため、 SQL文で入力しようと思っています。 しかし、入力するデータ量が多いので、 ファイルから読み込んで実行しようと考えました。 そこで、以下のプログラムを書いたのですが、 なんだかうまくいきません。 どなたか教えていただけないでしょうか。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>データの追加</title></head> <body> <?php $host = "localhost"; if (!$conn = mysql_connect($host, "root", "pass")){ die("データベース接続エラー.<br />"); } mysql_select_db("service_db", $conn); $fp = @fopen('sample.txt','r'); $i = 0; while( $sql[$i] = fgets($fp,2048) ){ $sql[$i] = stripslashes($sql[$i]); // print $sql[$i]; mysql_query($sql[$i], $conn) or die ("登録できませんでした。".$i); $i++; } fclose($fp); ?> </body> </html> ※ファイルにはSQL文が1行にひとつ書かれています。 よろしくお願いします。

    • 締切済み
    • PHP
  • mysql sqlエラー

    先ほども質問したのですが再度質問させていただきます mysql limitページ分割を行っていてエラーは消せたのですが今度 SQLエラーになり出来ません 前の人が質問したのを参考にしてつくったのですがうまくいかず困っています 検索結果を10件ずつ表示して googleみたいに 1l 2l 3 みたいな感じやりたいです <body> <?php error_reporting(E_ALL ^ E_NOTICE); //データベースに接続 if (!$con = mysql_connect("localhost", "root", "admin")) { echo "接続エラー" ; exit ; } //データベースを選択 if (!mysql_select_db("db_test", $con)) { echo "データベース選択エラー" ; exit ; } //LIMITを使ったSELECT文を作成 $sql = "select * from tbl_test where (氏名 LIKE '%{$_GET['name']}%') or (住所 LIKE '%{$_GET['name']}%')"; $sql = "limit" . $page * 10 . ", 10" ; //SQL実行 if (!$res = mysql_query($sql)) { echo "SQLエラー<BR>" ; exit ; } //検索結果表示 echo "<table border=1>" ; echo "<tr> <th>番号</th> <th>氏名</th> <th>住所</th> <th>操作</th> </tr>" ; while($row = mysql_fetch_array($res)){ $ID = htmlspecialchars($row['番号']); $NAME = htmlspecialchars($row['氏名']); $ADDR = htmlspecialchars($row['住所']); echo "<tr> <td>$ID</td> <td>$NAME</td> <td>$ADDR</td> <td><a href='edit.php?番号=$ID'>修正</a> <a href='delete.php?番号=$ID'>削除</a></td> </tr>"; //検索条件に該当する全データの件数取得 $sql = "select count(*) from tbl_test " ; $sql = "where (氏名 LIKE '%{$_POST['name']}%') or (住所 LIKE '%{$_POST['name']}%')"; if (!$res = mysql_query($sql)) { echo "SQLエラー<BR>" ; exit ; } $row = mysql_fetch_array($res) ; $cnt = $row[0] ; //ページ表示 if(!$cnt > 10) echo ceil($cnt / 10), "ページの中の", $page + 1, "ページ目を表示<br>" ; //前の10件 if ($page_num != 0) { echo "<a href = find.php?name=".$name. ". $page -1.>" ; echo "&lt 前の10件"; } //次の10件 if (($page_num + 1)*10 < $cnt) { echo "<a href = find.php?name=".$name. ". $page +1.>" ; echo " 次の10件 &g</a>t" ; } //結果セットの開放 mysql_free_result ($res) ; //データベースから切断 mysql_close($con) ; } ?> </body> </html>

    • ベストアンサー
    • MySQL
  • phpでデーターベース編集

    phpを独学し始めた初心者です。 よろしくお願いします。 以下のphpファイルを実行すると エラーが出ないにもかかわらず、 データーベースの表示で確認すると 『item_name』に『もも』という文字が入っていません。 その他はphp通りデーターが挿入されます。 なぜでしょうか? (環境)------------------------------------- phpエディターでphpファイルをつくり phpMyAdminでデーターベースを編集してます。 ローカルホストです。 --------------------------------------------- <?php mysql_connect('localhost', 'root', '') or die(mysql_error()); mysql_select_db('mydb') or die(mysql_error()); mysql_query('SET NAMES UTF8'); mysql_query ('INSERT INTO my_items SET maker_id=1, item_name="もも", price=480, keyword="缶詰,ピンク,甘い", sales=0, created="2010-10-10", modified="2012-05-05"') or die(mysql_error()); echo 'データー挿入完了'; ?> どうぞよろしくお願いします。

  • SQL文のエラー原因がわかりません・・。

    これの何処が間違っているのでしょうか? 本のコードをそのまま手打ちしてるだけなんですが・・・。 何処かにエラーがあるんでしょうか?? CREATE TABLE aliens_abduction ( last_name varchar(30) , first_name varchar(30) , when varchar(30) , howlong varchar(30) , howmany varchar(30) , who varchar(100) , how varchar(100) , see varchar(10) , other varchar(100) , email varchar(50) ); エラー内容↓ #1064 - 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 'when varchar(30) , howlong varchar(30) , howmany varchar(30) , who varchar(100) ' at line 4

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