Почему разные результаты в консоли и браузере при запуске C++ CGI?

Я использую библиотеки cgicc и mysql++ для разработки CGI-программ на C++. Хотя я могу скомпилировать программу и собрать исполняемый файл, но не могу увидеть полный результат в браузере.

Here is the data:
Hello!

select * from table_cities
0

Я не в состоянии понять, почему cout << res.num_rows(); возврате 0 в случае вывода из браузера и 18 (фактическое значение) в случае консоли?

Я вижу полный результат в консоли.

В чем может быть причина. Я что-то упустил в коде?

#include <iostream>
#include "cgicc/Cgicc.h"
#include "cgicc/HTTPHTMLHeader.h"
#include "cgicc/HTMLClasses.h"
#include <stdlib.h>

// mysql must come after cgi stuff for some reason
#include <mysql++.h>

using namespace cgicc;
using namespace std;
using namespace mysqlpp;

// Helper function for form text boxes and lists
string getFormString(Cgicc& cgi, char *element) 
{
  const_form_iterator name = cgi.getElement(element);
  if(name != (*cgi).end() && ! name->isEmpty())
    return (string)(**name);
  else
    return (string)"";
}

int main(int argc, char* argv[])
{
  Cgicc cgi;
  cout << HTTPHTMLHeader() << endl;

  //cout << HTMLDoctype(HTMLDoctype::eStrict) << endl;
  cout << html() << endl;
  cout << head(title("Results")) << endl;

  cout << body() << endl;
  cout << h1("Here is the data:") << endl;
  cout << "Hello!" << p() << endl;

  try {
  //
    Connection conn(false);
    conn.connect("ts", "127.0.0.1", "root", "Devesh#1");

    string querystr = "select * from table_cities";
    cout << querystr << "<br>" << endl;
    Query query = conn.query();
    query << querystr;

    StoreQueryResult res = query.store();
    Row row;
    StoreQueryResult::iterator iter;

    cout << res.num_rows();
    cout << table().set("border=1") << endl;


    for (iter = res.begin(); iter != res.end(); iter++) 
    {
      row = *iter;
      cout << tr() << endl;
      cout << td((const char *)row[0]) << endl;
      cout << td((const char *)row[1]) << endl;
      //cout << td((const char *)row[2]) << endl;
      cout << tr() << endl;
    }
    cout << table() << endl;

  } 

    catch (BadQuery er)
    {   // handle any connection or                      
         // query errors that may come up 
         cerr << "Error: " << er.what() << endl;
         return -1;
    }

  cout << body() << html() << endl;
  return 0;
}

1 ответ

Использование conn.connect("ts", "localhost", "root", "Devesh#1"); вместо conn.connect("ts", "127.0.0.1", "root", "Devesh#1"); решает проблему.

Другие вопросы по тегам