• ベストアンサー

SQL insert文のシングル・ダブルクオーテーション

ASPで(DBと連結)登録画面を作っています。 登録フォームから「登録」ボタンを押したあとのDBへデータを入力(更新)する時のSQL文で手間取っています。 「パラメータが少なすぎます。1 を指定してください。 」とエラーが出ます。フィールド名は間違っていません。 cateid付近のシングル・ダブルクオーテーションの書き方がおかしいのかなとも思いますが長時間見てますがどこがおかしいか分かりません。 -------------- StrSQL = "insert into contents (" StrSQL = StrSQL & " title, " StrSQL = StrSQL & " naiyou, " StrSQL = StrSQL & " hiduke, " StrSQL = StrSQL & " cateid " StrSQL = StrSQL & ") values (" StrSQL = StrSQL & "'" & title & "'," StrSQL = StrSQL & "'" & naiyou & "'," StrSQL = StrSQL & "#" & hiduke & "#," StrSQL = StrSQL & " cateid " StrSQL = StrSQL & ")" -------------- cateidは入力フォームのセレクトボックスからの値で数値型です。 ご助言頂ければ助かります。 あとなぜinsert文、update、delete文のときはStrSQL = "・・・"と「""」で囲むのでしょうか。 長文すみません。宜しくお願いします。

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

  • ベストアンサー
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 cateidが数値型でしたら、 StrSQL & cateid になるかなと思います。 (ASPあまりさわったことないので間違えてたらすいません) 実際に画面にStrSQLの内容を表示してみるとデバックしやすいですよ。 >あとなぜinsert文、update、delete文のときはStrSQL= "・・・"と「""」で囲むのでしょうか。 SQL「文」というだけあって、queryとして実行される SQLは単純な文字列の集合なので 囲む必要があります。

recycle_rocket
質問者

お礼

早速StrSQL & cateidでしてみました。 動くようになりました! またStrSQLの内容を表示してデバックも試してみました。前のだと -------- insert into contents ( title, naiyou, hiduke, cateid ) values ('reponse','write',#2005/02/16#,cateid) -------- とcateidの部分の値が「1」等入らずおかしかったです。 SQL「文」というだけあって・・の部分も参考になりました。 大変感謝です。ありがとうございました。

その他の回答 (3)

  • Kuppycat
  • ベストアンサー率50% (109/216)
回答No.4

#3です。 "cateid"という「文字」ではなく、"cateid"という「ファンクションの返り値」ですね。 SQL文として、cateid の中身の数値でなく、cateid という文字が書かれているので、cateid というストアドファンクションを探しに行っているものと思われます。

recycle_rocket
質問者

お礼

cateid というストアドファンクションを探しに行っている・・等大変参考になりました。 補足込みいただき、ありがとうございました。これでSQL文から開放されて次のステップに進めます。

  • Kuppycat
  • ベストアンサー率50% (109/216)
回答No.3

このSQL文ですと、cateid に、"cateid" という文字をいれようとします。 このばあい、#1の方が言っているとおり、 StrSQL = StrSQL & cateid と書くのが正解ですね。

  • kenthy
  • ベストアンサー率28% (2/7)
回答No.2

>StrSQL = StrSQL & " cateid " ですが、cateid というのが変数でしたら 間違ってますね StrSQL = StrSQL & cateid でよろしいのでは?

recycle_rocket
質問者

お礼

やはりcateid の部分でした。数時間のSQL文の悩みとイライラが解決できて良かったです。本当にありがとうございました。

関連するQ&A

  • mysql の insert文のクォーテーションについて

    インサート文を作るとき、 INSERT INTO shitumon (  title_question,  komari_level )VALUES(  'mysql の insert文のクォーテーションについて',  '2' ) のように、int系のデータに''とクォーテーションつけても 問題ないのでしょうか? int系のデータのクォーテーションは外しておくのが望ましいのでしょうか?

    • ベストアンサー
    • MySQL
  • SQL文のダブルクォーテーションを取りたい。

    SQL2008を使用しております。 2つのDBを統合したいのですがユニークIDがかぶっているデータが あるのでIDを変更したいのですが フリーソフトでINSERT文をTab区切りで出力してIDを変更してINSERT文を 作成するといらない箇所に「"」ダブルクォーテーションが入ってしまします。 もちろんその状態ではクエリ実行できないので困っています。 順序はINSERT文をTab区切りで出力→出力されたTab区切りのcsvのIDを変更→テキストで保存(csvでも保存)→拡張子をsqlに変更するといらない箇所に「"」ダブルクォーテーションが入ってしまします。 変更保存の問題でしょうか? どうしたら「"」ダブルクォーテーションが入らない方法はありませんか? 以上、わかるかた教えてください。 よろしくお願いします。

  • Access97 SQLでINSERT されない

    Access97を使って下記のようなモジュールを作成しました。  が、接続DAT にはデータが追加されません。  何故でしょうか?   j = 10 i = 1 strSQL = "" Do Until i = j JIJI = JI(i) strSQL = "INSERT INTO 接続DAT (重複ID,区別記号" strSQL = strSQL & ") VALUES (" strSQL = strSQL & "'" & JIJI & "'" strSQL = strSQL & ", '" & D & "'" strSQL = strSQL & ")" Set DB = CurrentDb() DB.Execute strSQL Set DB = Nothing Set RS = Nothing i = i + 1 Loop

  • insert文

    VBAの質問ではありますが、こちらの方が回答されやすいかと思い こちらに投稿しました。 Excel内のデータをDBに作成したテーブルの 各項目にinsert文を使って入れる処理をしたく 下記のコードを書いたのですが 実行時エラー440 オートメーションエラーと、でて止まってしまいます。 項目は MASTERKBN NAMEKBN NAMECODE NAMESの4つです。 Const Sv_Name = "Scaw" Const Pass_WD = "SAWAGUCHI/SAWAGUCHI" Const Table_Name = "ZAA_MS510" Sub 削除後追加() Dim OSession As Object Dim ODataBase As Object Dim StrSQL As String Dim idx1, idx2 As Integer Dim objDstSheet As Worksheet Set OSession = CreateObject("OracleInProcserver.XOraSession") Set ODataBase = OSession.OpenDatabase(Sv_Name, Pass_WD, 0&) StrSQL = "Truncate Table " & Table_Name ODataBase.ExecuteSQL (StrSQL) Set objDstSheet = ThisWorkbook.Worksheets(3) With objDstSheet For idx1 = 2 To objDstSheet.UsedRange.Rows.Count 'StrSQL = "Insert Into " & Table_Name & " Values(" For idx2 = 1 To objDstSheet.UsedRange.Columns.Count If idx2 = 5 Then StrSQL = StrSQL & .Cells(idx1, idx2) & "," Else StrSQL = StrSQL & "'" & .Cells(idx1, idx2) & "'," End If Next Mid(StrSQL, Len(StrSQL), 1) = ")" ODataBase.ExecuteSQL (StrSQL) ※エラーが出る部分 Next End With End Sub Insert文が間違っているのかそれとも他のことが原因なのか わからず困ってます。 どなたか詳しく教えてもらえませんか。 お願いします。

  • シングルクォーテーションの変換

    VB6からOracle9iのテーブルにシングルクォーテーション(半角)を含む文字列を登録する場合に、よく行われる変換方法は何がありますでしょうか? (1)シングルクォーテーションを取り除く (2)全角文字に置き換える (3)SQL文を変換しDBに登録できるようにする (3)の場合、使用される関数が載っているホームページがありましたらご教授のほどよろしくお願い致します。

  • DBへ「”」ダブルクォーテーションの書き込み

    JScript で ASPを書いています。 fomeで入力された文字列を変数に入れて、DB(SQLServer)へINSERTしようとしているのですが、 文章の中にダブルクォーテーションがあると、「"」以降の文字列が消えてしまいます。  何か対処方法はありますでしょうか?  宜しくお願いします。

  • 緊急です。insert文が実行されない

    フォームで入力された値をINSERT文でMYSQLへ保存しようとしているのですが、 以下のように記述して実行し、phpmyadminでテーブルを確認しても データが入力されておらず空のテーブルとなっています ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー <?php $SCR = $_POST['junni']; $Name = $_POST['namae']; $Day = $_POST['hiduke']; $conn = mysql_connect($url,$user,$pass); $sdb = mysql_select_db($db,$conn); $sql = "insert into `seiseki`(`name`,`day`,`score`)values('$Name','$Day','$SCR')"; $res = mysql_query($sql,$sdb,$conn); mysql_free_result($res); mysql_close($conn); ?> ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 補足として、 実行後、 Warning: mysql_query() expects at most 2 parameters, 3 given in 「phpの場所とファイル名」 on line 26 Warning: mysql_free_result() expects parameter 1 to be resource, null given in 「phpの場所とファイル名」 on line 28 という表示がされます また、$conn =のあとに print ($Day"); print ($Name"); などを入れると値は表示されているため、受け渡しは問題ないかと思います また、$url,$user,$pass,$dbは、$SCR = $_POST['junni'];以前に $url = "localhost";というような形で代入しており、入力ミスなどは何度も確認しましたがありません 知識がほとんどありませんので、説明足らずかもしれませんが、 文法、入力間違いや解決策がありましたらよろしくお願いいたします

    • ベストアンサー
    • MySQL
  • だれかぁぁぁぁぁぁぁぁ(-o-)

    質問ですっ!! 今VBを使ってシステムを作っているのですが、下の式を実行しても、Insert Intoのエラーがでてしまい、Accessのデータベースに追加する事が出来ません。 モジュール名は間違っていません! なぜ違うか分かる人がいましたら、助けてくださ~い 8(^0^)8 あっ!!ワークスペースやデータベースはちゃんと 一番最初の段階で、セットしてあります。 このフォームのどこかがおかしいと思うんですが・・・ Private Sub cmd_Input_Click() Set ws = DBEngine.Workspaces(0) Set db = ws.OpenDatabase(lcstrDatebase) strSQL = "" strSQL = strSQL & " Insert Into rireki_tb " strSQL = strSQL & " ( Hiduke" strSQL = strSQL & " ( SyainCd" strSQL = strSQL & " ,TenpoCd" strSQL = strSQL & " ,SyohinCd" strSQL = strSQL & " ,SyainNm" strSQL = strSQL & " ,Nyukin" strSQL = strSQL & " )" strSQL = strSQL & " values ('" & lbl_Date.Caption & "'" strSQL = strSQL & " values ('" & cmb_SyainCd8.Text & "'" strSQL = strSQL & " ,'" & 0 & "'" strSQL = strSQL & " ,'" & 0 & "'" strSQL = strSQL & " ,'" & lbl_SyainNm8.Caption & "'" strSQL = strSQL & " ," & txt_Nyukin8.Text & ")" db.Execute strSQL db.Close ws.Close Set db = Nothing Set ws = Nothing End Sub

  • SQL文がDouble型として認識される

    SQL文がDouble型として認識される 質問させて頂きます。 ユーザーのポイントを引き算し、SQLにアップデートするプログラムを組んでいます。 実行すると String "UPDATE 「テーブル名」 SET 「要素名(Integer)」 " から型 'Double' への変換は無効です。 というエラーが出るのですが、SQL文の部分を何故Doubleに変換するのでしょうか? デバッグにて変数を確認し、String等をいれてみても同じエラーが出る上 SQL文は他の部分で正常に動いているものをコピーしても同じエラーが出ます。 INSERT INTO テーブル名(要素) VALUES(xxx)"であれば 「String "INSERT INTO テーブル名(要素) VALUES」 " から型 'Double' への変換は無効です。」 となります。 SQL文の記述が間違っているとは思えず、VBの記述の問題としてここで質問させて頂きました。 コードは以下の通りで、環境はVB2010 + SQL Server2008です。 回答して頂くために不足している情報がありましたらすぐに追記致します。 至らない文章ではありますが、どうかよろしくお願い致します。 Dim point As Integer point = point(Integer型) - price(Integer型) Dim strSQL As String = "UPDATE 「テーブル名」 SET 「要素(Int型)」 = '" + point + "' WHERE UserID = '" + userid(String型) + "'" cn.ConnectionString = My.Settings.ServerURL Dim cmd4 As New SqlCommand(strSQL, cn) cn.Open() cmd4.ExecuteNonQuery() cn.Close()

  • SQLインジェクション対策(クオーテーション関連

    PHP Version 5.4.7の環境にて。 SQLite3::escapeStringを使って、 SQLインジェクション対策をしようと考えています。 HTMLの<form>からPOSTで値を受け取り、 その値をSQL文に入れ込み、 そのクエリ(※ちなみに、INSERTのみです。)をSQLite3のDBに対して行う、 なんてことをする際の、 SQLインジェクション対策として、お考え下さい。 POSTで受け取る値に入っていたら危険なものとして、 「シングルクオーテーション」が、まず、挙げられるかと思います。 「'」 ←これです。 さて、「"」 ←こちらはダブルクオーテーションですが、 こちらのダブルの方はエスケープする必要は無いのでしょうか? (例)※wikipediaより SELECT * FROM users WHERE name = '(入力値)'; SELECT * FROM users WHERE name = 't' OR 't' = 't'; → このSQL文では条件が常に真となるため、 nameカラムの値にかかわらず、全レコードが選択される。 → ということで、入力値に、 エスケープされていない「シングルクオーテーション」をそのまま使うのはNG。 ここまではOKです。 では、次に、ダブルクオーテーション版で、 SELECT * FROM users WHERE name = "(入力値)"; SELECT * FROM users WHERE name = "t" OR "t" = "t"; こちらはどうなのでしょうか? (シングルをダブルに変えただけですが。) ---------- ちなみに、 SQLite3::escapeString にて、 (1) $var = "Let's"; //←シングルクオーテーション $db = new SQLite3(':memory:'); $escaped_var = $db->escapeString($var); echo $escaped_var; //Let''s と表示される (「 ' 」が1つ追加される。) (2) $var = 'Let"s'; //←ダブルクオーテーション $db = new SQLite3(':memory:'); $escaped_var = $db->escapeString($var); echo $escaped_var; //Let"s と表示される (何も追加されず。) というように、 シングルクオーテーションはエスケープされるが、 ダブルクオーテーションの方ではエスケープされませんでした。 これは、つまり、 ダブルクオーテーションの方は危険視されていない、 ということだと思いますが、 でも、本当にダブルクオーテーションをエスケープせずに、 そのまま、SQL文につっこんでも大丈夫なのでしょうか?

    • ベストアンサー
    • PHP