以前,SQLserverへの接続方法で助けてもらったライカです.
今回は前回の続きでの質問となります.
以前の質問でなんとかサーバーへ接続することが出来ました.
ありがとうございます.
今回の質問は,サーバーへ書き込む際のことについてです.
sprintf_s(pNAME,%s,フィールド名);
sprintf_s(pDATA,'%s',データ);
strcat(pNAME2,pNAME);
strcat(pDATA2,buf);
strcat(pNAME2, ,);
strcat(pDATA2, ,);
といった命令で
〔フィールド名1,フィールド名2,・・・・フィールド名x〕
としたいのですが
上記の命令だと,
〔フィールド名1,フィールド名2,・・・・フィールド名x,〕
となってしまい最後に余計な,がついてしまいます.
最後の,の消し方がわからずに作業が止まってしまってます.
ネットや書籍などいろいろ調べてみたのですが,有効な情報は得られませんでした.
どうかよろしくおねがいします.
余計なstrcat()を消したらよいのでは、としか言えないな。この情報じゃ。
すいません,情報不足だったみたいで・・・.
ちなみに下記の方法でこの問題を解消することが出来ました.
int nN = strlen(pNAME2);
pNAME2[nN-1] = '\0';
int nD = strlen(pDATA2);
pDATA2[nD-1] = '\0';
ついでに質問なのですが,
char pDATA;
char buf;
sprintf_s(pDATA,'%s',buf);
としたところ,bufの内容しかpDATAに入らず
''を入れることが出来ません.
調べたところ'' ''と二つ重ねたら出来ると聞いたのですが
それを実行してみても出来ませんでした.
他に何か良い方法等あれば教えていただきたいです.
うーん。この方向での解決策を模索するより先に
SQLインジェクション脆弱性について調べるべし。
するとぜんぜん違う方策が提案されているのがわかるだろう。
このまま作ってもただのセキュリティホールだだ漏れプログラムになりかねない
全部作り直し、って可能性がちらほら見え隠れしているような気のせいがする
// ん~ 反映されるけど・・
#include <windows.h>
#include <iostream>
using namespace std ;
int main ()
{
char pDATA[128] ;
char buf[] = hoge ;
sprintf_s(pDATA,'%s',buf) ;
cout << pDATA << endl ; // 'hoge'
printf( pDATA ) ; // 'hoge'
MessageBoxA ( NULL, pDATA, 0, 0 ) ; // 'hoge'
cin.ignore() ;
return 0 ;
}
> char pDATA;
> char buf;
> sprintf_s(pDATA,'%s',buf);
文字と文字列の区別が付いてないです。
sprintfの例。
{
char pData[1024];
char buf[] = hoge;
sprintf(pData, '%s', buf);
cout << : << pData << : << endl;
}