teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記&訂正

2020/07/01 01:33

投稿

退会済みユーザー
answer CHANGED
@@ -1,8 +1,8 @@
1
1
  SQLite は触ったこともないのでハズレの回答だったらすみません。
2
2
 
3
- 書かれているコードを見ると、パラメータ化の有無が結果の違いになっていて(1 番最初だけがパラメータ化クエリ)の違いが結果に表れているように思えます。
3
+ 書かれているコードを見ると、パラメータ化の有無(1 番最初だけがパラメータ化クエリ)の違いが結果に表れているように思えます。
4
4
 
5
- ただ、見た感じではパラメータ化してない 2 番目、3 番目でもよさそうで、なぜ結果に違いが出るのかは分かりませんが。(ただ、2 番目、3 番目は double.MinValue がクエリに文字列として埋め込まれていてそこが SQLite でどう解釈されるのか怪しい感じがします。1 番目は double.MinValue の値が生でパラメータに渡されていて間違う余地がなさそうだと思います
5
+ ただ、見た感じではパラメータ化してない 2 番目、3 番目でもよさそうで、なぜ結果に違いが出るのかは分かりませんが。(強いて言うと、2 番目、3 番目は double.MinValue がクエリに文字列として埋め込まれていてそこが SQLite でどう解釈されるのか怪しい感じがします。1 番目は double.MinValue の値が生でパラメータに渡されていて間違う余地がなさそうだと思います)
6
6
 
7
7
  SQL Server ではパラメータ化クエリは sp_executesql に変換されて実行されます。SQLite でもそのような違いがあって、それが結果の違いになっているのかも。(想像です。でも、結果からは、1 番目のパラメータ化クエリと 2, 3 番目のアドホッククエリとでは何か内部での扱いが違うのは間違いなさそうに見えます)
8
8
 

1

追記&訂正

2020/07/01 01:33

投稿

退会済みユーザー
answer CHANGED
@@ -1,10 +1,10 @@
1
1
  SQLite は触ったこともないのでハズレの回答だったらすみません。
2
2
 
3
- 書かれているコードを見ると、パラメータ化の有無が結果の違いになっていて(番最初だけがパラメータ化クエリ)その違いが結果に表れているように思えます。
3
+ 書かれているコードを見ると、パラメータ化の有無が結果の違いになっていて(1 番最初だけがパラメータ化クエリ)その違いが結果に表れているように思えます。
4
4
 
5
- ただ、パラメータ化してない 2 番目、3 番目でもよさそうな感じで、なぜ結果に違いが出るのかは分かりませんが。
5
+ ただ、見た感じではパラメータ化してない 2 番目、3 番目でもよさそうで、なぜ結果に違いが出るのかは分かりませんが。(ただ、2 番目、3 番目は double.MinValue がクエリに文字列として埋め込まれていてそこが SQLite でどう解釈されるのか怪しい感じがします。1 番目は double.MinValue の値が生でパラメータに渡されていて間違う余地がなさそうだと思いますが)
6
6
 
7
- SQL Server ではパラメータ化クエリは sp_executesql に変換されて実行されます。SQLite でもそのような違いがあって、それが結果の違いになっているのかも。
7
+ SQL Server ではパラメータ化クエリは sp_executesql に変換されて実行されます。SQLite でもそのような違いがあって、それが結果の違いになっているのかも。(想像です。でも、結果からは、1 番目のパラメータ化クエリと 2, 3 番目のアドホッククエリとでは何か内部での扱いが違うのは間違いなさそうに見えます)
8
8
 
9
9
 
10
10
  ちなみに、本題とは直接関係ない話ですが、SQL Server では、SQL インジェクションの防止とパフォーマンスの向上、それに副次的な効用として文字化けを未然に防ぐということで、パラメータ化クエリを使うのは必須と言ってもいいです。