ホームページ  >  記事  >  バックエンド開発  >  WinInet シミュレートされた HTTP POST リクエスト エラー

WinInet シミュレートされた HTTP POST リクエスト エラー

WBOY
WBOYオリジナル
2016-06-23 13:55:221495ブラウズ

VS2012 にブレークポイントを設定して実行を追跡すると、php ファイルへのリクエストが正しい戻り文字列を取得できなかったことがわかりましたが、次のエラー メッセージが表示されました:
無効なクエリ:
SQL 構文チェックにエラーがあります。 1 行目の '' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを参照してください。
クエリ全体:
select id,name fromindex_activities where top=0

この情報は、次のステートメント行の後ろにある私の

$result = mysql_query($query);

です。 PHP,"if"はリクエストが失敗した場合のみ出力されます。当然mysqlリクエストは失敗しており、PHPファイルの呼び出しは成功したと判断できます。

しかし、Web ページで同じパラメータを使用して同じ PHP ファイルを呼び出すと (GET メソッド)、戻り値は正しいです。

私は
$top = $_REQUEST['top'];
を使用して php ファイル内のパラメーターを取得します
そのため、POST パラメーターと GET パラメーターの両方が同じ方法で使用できるはずです。

何が問題なのかわかりませんか? WinInet を使用すると、リクエスト文字列に異常が発生しますか?


ディスカッションへの返信(解決策)

データベース接続は正しいですか?

データベース接続は正しいですか?

接続が正しい場合は、正しくない場合は、mysql に接続できませんを返し、次のリクエストは実行されず、MySQL リクエストのエラー メッセージは表示されません。
同じパラメータを持つ別のシミュレートされた HTTP リクエストがあり、返される値は正しいです:

void CDllValidateDlg::ValidateAPerson(char* Name, char* Code){	CString post_data;	post_data.Format("userid='%s'&name='%s'",Code,Name); //请求的附加参数	CString result; //返回的结果	CString post_page = "test_id_validater/validateid.php"; //请求的php	PostHttpPage(result,post_page,post_data);	AfxMessageBox(result);}

そして、デバッグ時に理解できないこの HTTP リクエストの何が違うのでしょうか。すべてのパラメータを書き留めました。元々は変数によって決定されていましたが、それでも mysql リクエストが正しくないことが返されます:
void CDllValidateDlg::getActs(HTREEITEM root){	CString post_data="top=0";//	char top[10];//	itoa(ActivitiesTree.GetItemData(root),top,10);//	post_data.Format("top=%s",top);	CString result;	CString post_page = "test_id_validater/GetActivities.php";//	AfxMessageBox("post_page:"+post_page+", "+"post_data:"+post_data);	PostHttpPage(result, post_page, post_data);	AfxMessageBox(result);    ……    ……

PHP 側の問題のように感じますが、次のように書くと正しい結果が返されます:

<?phprequire "use_daoru.php";$top = $_REQUEST['top'];$query = "select id,name from index_activities where top=0";$result = mysql_query($query);//if(!$result){//$message = 'Invalid query: '.mysql_error()."\n";//$message.= 'Whole query: '.$query;//die($message);//}$num = mysql_num_rows($result);for($i=0;$i<$num;$i++){	$row = mysql_fetch_row($result);	echo($row[0].":".$row[1].",");}?>

私が書いたコードは次のとおりです:
<?phprequire "use_daoru.php";$top = $_REQUEST['top'];$query = "select id,name from index_activities where top=$top";$result = mysql_query($query);//if(!$result){//$message = 'Invalid query: '.mysql_error()."\n";//$message.= 'Whole query: '.$query;//die($message);//}$num = mysql_num_rows($result);for($i=0;$i<$num;$i++){	$row = mysql_fetch_row($result);	echo($row[0].":".$row[1].",");}?>

無効なクエリ:

SQL 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルを確認して、1 行目の '' 付近に使用する正しい構文を確認してください。
クエリ全体:
select index_activities の id,name (top=0)
この情報は明らかにデータベース レポートが間違っています。

$query = "select id,name fromindex_activities where top=0"; の場合は問題ありません
と $query = "select id,name fromindex_activities where top=$top"; の場合は、$top には何もありません。値または数値ではありません
$top = $_REQUEST['top']; $top = intval($_REQUEST['top']); に変更してください

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。