次のクエリを使用して、mysql データベースに値を挿入しようとしています。
INSERT INTO TestTable (SearchTerm, SearchResult)
VALUES (?, ?), ("TestTerm", "TestResult");
「1 行目の近くに '?, ?) ("TestTerm", "TestResult")' というエラーがある」というエラー メッセージが表示されます。
誰かが私の間違いを指摘してくれませんか?
?
PDO や mysqli などのフレームワークで使用されます。通常のインサートはこんな感じ
INSERT INTO TestTable (SearchTerm, SearchResult)
VALUES ('TestTerm', 'TestResult');
また
INSERT INTO TestTable (SearchTerm, SearchResult)
SELECT 'TestTerm', 'TestResult';
スクリプト ダイレクト:
INSERT INTO TestTable (SearchTerm, SearchResult)
VALUES ("TestTerm", "TestResult");
準備済みステートメントを使用する場合:
INSERT INTO TestTable (SearchTerm, SearchResult) VALUES (?, ?);
perpared statementを使用しようとしているようです。疑問符は、クエリを分割する文字 (つまり、セミコロンと引用符) を含む可能性のある値を表すという考えです。
ライブラリを使用している場合、通常、これを行うには 2 つの手順を使用する必要があります。たとえば、Java では次のようになります。
PreparedStatement ps = new PreparedStatement( "INSERT INTO TestTable (SearchTerm, SearchResult) VALUES (?, ?)");
ps.execute("TestTerm", "TestResult");
ps.execute("Escaped;Term", "TestResult"); // the semicolon will be escaped for you
ほとんどの言語には、これを可能にする汎用 SQL ライブラリがあります。どの言語を使用していますか?