• ベストアンサー

Mysqlエスケープ文字回避の構文について

現在、 開発言語「VBA」 データベース「Mysql」 で開発をおこなっています。SQL構文を実行する際、エスケープ文字が入力された場合、致命的エラーが発生してしまいます。 INSERT INTO T_Test VALUES ( '\','\','\','100','2009/09/02 16:03:26') この場合回避策はどのようにおこなうのがいいでしょうか? 複数画面でSQL文を実行しているところがあるので一番手間のかからない修正方法はないでしょうか?? VALUESでセットしている値は画面のテキストから入力された値などです。 よろしくお願いします。

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

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

  • ベストアンサー
回答No.1

ACCESS VBAに限らず,一般的にはテキストから入力された値を受け取り、 SQLにセットする前にエスケープ文字自体をエスケープする、 という方法になると思います。 replace関数あたりを使うのがよいのではないでしょうか? また、今回は既存のプログラムのようなので 全てを変更するのは厳しいかもしれませんが、 DAOもしくはADOのレコードセットを使ってデータの作成/更新を行うと このあたりのことは気にする必要は無かったと思います。

flashman77
質問者

お礼

ありがとうございます。 現在おこなっているのは既存のプログラムのカスタマイズなので replace関数を使用し、エスケープ文字の除去をおこなった後 SQL文を実行するようにします。 色々調べたのですが・・・。 これでチビチビ修正していきます。 ありがとうございました。

関連するQ&A

  • MySQLから取り出したものを3つに分ける

    MySQLに以下のようなSQLを打ちました。 create table table_list( id int, task varchar(255) ); insert into table_list values(1,'ほげほげ1-1'); insert into table_list values(1,'ほげほげ1-2'); insert into table_list values(2,'ほげほげ2-1); insert into table_list values(2,'ほげほげ2-2'); insert into table_list values(3,'ほげほげ3-1'); そして、空のdiv要素が3つあります。 このデータベースからidの数値別に、div要素へtaskの文字列を入れたいのですが、どうすればいいのでしょうか? SQLで「select * from table_list」をやってからtaskを取り出すのか、3回SQLで「select task from table_list where id=1」のようにするのがよろしいんでしょうか?

    • ベストアンサー
    • PHP
  • mysql_real_escape_stringについて\r\nが付くのは?

    $sql = INSERT INTO users (logid, passwd) VALUES ( "'" . mysql_real_escape_string($_POST['id']) "','" . mysql_real_escape_string($_POST['pas']) . "';" とすると全POSTデータの先頭に「\r\n」が付与されてしまいます。 INSERT INTO users (iogid, passwd) VALUES ('\r\n 入力されたID', '\r\n 入力されたパス') こんな感じになってしまいます。 SQL実行時にデータベースに入ってしまっているのか、 phpMyAdminで確認すると、文章内に改行が入ってしまっているみたいで、表のレイアウトがガタガタになっています。 SQLインジェクション対策に必要だと参考書には表記されているのですが、あまりにデータベースが見にくいので、私の使い方が間違っている様な気がします。 (1)\r\nが先頭に付与されるのは正しいのでしょうか? (2)データベースにSQLで\r\nをINSERTしると、データも\r\nが入ってしまうのでしょうか? (3)PHP + MySQLでSQLインジェクション関数はmysql_real_escape_stringだけなのでしょうか? なにぶん超初心者なので、ご教授の程よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • MYSQL insertについて

    MYSQLについて MYSQLで insert into syouhin values(3,'ブラックコーヒー',120) で実行するとうまく入力されません charsetもsjisでしてますし、なにがいけないのでしょうか??おしえてくださいお願いします。

    • ベストアンサー
    • MySQL
  • INSERT INTOステートメント構文エラー

    VB.NET2003+Access2000でデータベース開発中です。 サブフォームを使ってデータグリッドのデータを編集することができるように INSERT、DELETE、UPDATE各コマンドを作成しようとしていたら、 表記ADOエラーが出て次に進めません。 INSERT INTO [編集対象テーブル名]       (列名1,列名2,・・・・) VALUES (?,?,?,?,?・・・・) というサンプルSQLですが、構文エラーって何か記述が抜けているんでしょうか? クエリビルダから「値の挿入」を選んでできたSQLなんですけれど。 解説書を見てもぴったりのコメントがないもので、どうかよろしくお願いいたします。

  • MySQLで、INSERT文でエラー

    下記のスクリプトで、MySQLサーバーのテーブルの中身を見ようとしたら、 返り値が空でした(行数0) ( クエリの実行時間 0.0010 秒 ) と表示されます。 どこが間違ってるのでしょうか。 ////////////////////// // データベース登録 // ////////////////////// $con = mysql_connect("mysql020.******", "*****", "*****"); // リモートのMySQLデータベースサーバーに接続する mysql_select_db("LAA0471050-ideamemo"); // データベースサーバーに存在する(myPHPAdminで作成済みの)データベースを選択する $sql = "SET NAMES utf8"; mysql_query($sql, $con); $sql = "INSERT INTO ideamemo_table (color, title, contents, create) VALUES ('$color', '$title', '$contents', '$create');"; mysql_query($sql, $con); mysql_close($con); ?>

    • ベストアンサー
    • MySQL
  • PHP/MySQL INSERT文について。

    PHP/MySQL INSERT文について。 こんばんは。 PHP・MySQLでデータベースへデータの書き込みを試行錯誤しております。 そこで一つどうしても解決出来ない問題(謎)があるので質問させて頂きます。 簡易的な質問内容としては 全てのカラムに対する値の挿入は可能なのに カラムを指定して値を挿入しようとしたらエラーが出ます。 データベースの設定はテーブル名【TESTtable】 フィールド 種別 NULL 属性/その他 AAA int(6) No UNSIGNED ZEROFILL / auto_increment BBB int(4) Yes CCC int(4) Yes DDD int(4) Yes PHPでのSQL実行文をしてはの記述としては(値は全て可変で数値を代入します。) INSERT INTO TESTtable VALUES (last_insert_id(),50,600,50) とした場合は問題無くテーブルに書き込みされますが カラムを指定して INSERT INTO TESTtable (AAA,BBB,CCC,DDD) VALUES (last_insert_id(),50,600,50) とした場合、書き込みが行われません。 INSERT INTO TESTtable ('AAA','BBB','CCC','DDD') VALUES (last_insert_id(),50,600,50) INSERT INTO TESTtable (AAA,'BBB','CCC','DDD') VALUES (last_insert_id(),50,600,50) INSERT INTO TESTtable ('AAA','BBB','CCC','DDD') VALUES (last_insert_id(),'50','600','50') 等、色々試してみましたが不可能でした。 カラムAAAはauto_incrementにりますので毎回書き込みされますが BBB、CCC、DDDは書き込みが不要の場合もあるので カラム指定の書き込みは必須となるのですが・・・行き詰ってしまいました・・・。 ご教授頂ければ幸いです。 どうぞ、宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • mysqlでテキストフィールドへPHPからデータ

    もともと考え方がおかしいのかも知れませんが PHPでデータをよみます。 mysql ではTEXTフィールドがあります $r=fread($fp, 長さ(可変長)); でこれからです。 Buf4がTEXTフィールド); $sql="insert into $tbn4 ( Buf4 ) values ($r); sql実行。データがはいりません。

    • ベストアンサー
    • PHP
  • 「~」文字の登録

    すみません。 以下のSQLを実行した後、登録した内容を 画面上で表示した時、 「あ~お」が「あ?お」となってしまいました。 「~」文字を登録する場合はSQLで何か処理しないといけないのでしょうか。 INSERT INTO TEST (A,B,) VALUES(1,'あ~お') よろしくお願いします。

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

  • トランザクションについて教えてください

    PHPとMysqlを利用しています。MySQL4.1.18です。 同じテーブルに2つ以上の値をINSERTする場合、 1つでもエラーがあればロールバックさせるということはできますでしょうか。 あらかじめ「id=1」の値を登録しておき、この場合1つめがエラーになるので 2つめも実行されないでほしいのですが、実行されてしまいます。 テーブルのタイプはInnoDBにしています。 どうぞよろしくお願いします。 以下を参考に作成しました。 http://oshiete.nikkeibp.co.jp/qa3065237.html $sql = "begin"; $rst = mysql_query($sql, $con); //1つめ $sql= "INSERT INTO T_test(id,name)values('1','山田')"; $rst = mysql_query($sql, $con); if(!$rst){$err="err";} //2つめ $sql= "INSERT INTO T_test(id,name)values('2','鈴木')"; $rst = mysql_query($sql, $con); if(!$rst){$err="err";} $sql = "commit"; $rst = mysql_query($sql, $con); if($err){ $sql = "rollback"; $rst = mysql_query($sql, $con); }

    • ベストアンサー
    • MySQL