7

引用符で囲まれた文字列内のセミコロンが SQL エラーを引き起こす可能性があることは、すでに何人かによって報告されています。

私の現在の設定は SQLite 3 データベースで、挿入を実行しようとしています。新しいデータのフィールドの 1 つに HTML が含まれています。その一部として、セミコロンで終わる html エンティティがあります。è

私が試している簡単な例のクエリは次のとおりです。

insert into my_table (some_field) values ('Hello; world');

そして、私が得ているエラーは次のとおりです。

1)

insert into my_table (some_field) values ('Hello
Error : unrecognized token: "'Hello"

2)

world')
Error : near "world": syntax error

したがって、SQL エンジンは明らかにセミコロンを認識しHello; world、ステートメントの終わりとして解釈します。私は他の数人にこれをテストするように依頼しました.SQLite GUIを使用しているときにこれが機能する人もいるので、変更が必要なのはSQL設定だけだと思います.

少なくともデフォルトでは、SQLエンジンはステートメントの終わりにのみセミコロンを必要としているようですが、これを変更する方法を知っている人はいますか?

非常に奇妙です。次のクエリを試してください。

DROP TABLE IF EXISTS djp;
CREATE Table djp ("mykey" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "name" VARCHAR(25));
INSERT INTO djp (name) VALUES ('This is test two; OK?');
SELECT * FROM djp;

挿入するフィールドを指定せずに挿入すると(自動インクリメントが少し無意味になります)、エラーは発生しないことに注意してください...

INSERT INTO djp VALUES (1, 'This is test two; OK?');
4

3 に答える 3

2

コメントに記載されているように、スタンドアロンsqlite3.exeエンジンでコード例を実行したところ、他のテキストと同じように (セミコロンの有無にかかわらず) 実行されました。INSERT INTO Foo VALUES ()あなたがと癖で指摘したのでINSERT INTO Foo (column) VALUES ()、これはあなたのコードの問題ではなく、Navicat のバグであることに同意します。

于 2012-09-04T23:04:52.687 に答える
1

サムの回答で述べたように、問題は SQLite エディターであり、SQLite 自体ではありません。この質問の場合、問題は Navicat にありました (注: 10.1.2 の時点でパッチが適用されています)。私は同じ問題に遭遇しましたが、私にとっては SqlQuery と同じ問題でした。

無料のSQLiteクライアント/エディターの多くが文字列サポートでセミコロンを持っていないことに気付くまで、私はこれに苦労しました!

私は最終的に、文字列内のセミコロンをサポートし、無料であるMesaSQLiteを見つけました (ただし、他にも若干の欠点があります)。

検索エンジンでこの質問を簡単に見つけたので、この回答を投稿していますが、回答が簡単に見つかりませんでした。これに遭遇した他の人に幸運を祈ります。

役立つその他の質問:

Mac SQLite エディタ

優れたオープン ソース GUI SQLite データベース マネージャーとは?

問題は SQLite ではないことを忘れないでください。:)

于 2013-01-18T04:58:35.213 に答える
0

SQL ステートメントの末尾にあるエスケープ文字を SQLite に伝えるだけでよいと思います。例えば:

SELECT * FROM MyTable WHERE RevenueChange LIKE '%0\%' ESCAPE '\'

LIKE は 30% や 140% などの値に一致しますPHPPDOMYSQLIを使用しない理由

PDO 拡張機能の使用例:

<?php

    $name = 'one';
    $value = 1;

    $stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
    $stmt->bindParam(1, $name);
    $stmt->bindParam(2, $value);

    $stmt->execute();

?>

これにより、特殊文字を含むレコードを挿入できます。

于 2012-09-04T22:34:15.537 に答える