3

私は SQL/PHP に不慣れで、エラー メッセージを乗り越えることができません。

"You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version 
for the right syntax to use near '1',"

このエラーをデバッグしようとしていますが、スクリプトで「1」を探していますが、このビットしかありません:

//enter information into table
$sql = "INSERT INTO $_SESSION[table_name] VALUES 
        ('$_POST[first_name]', '$_POST[last_name]', '$_POST[user_name]', 
           password('$_POST[password]'), 'Administrators', '', '', '0', '$_SESSION[admin_email]',
          '$_POST[redirect_to]', '1', '$date')";

$result = @mysql_query($sql,$connection) or die(mysql_error());

if($result)
{...
  1. これで問題はありません。

  2. これをデバッグする方法がわかりません。エラーを見つけるにはどうすればよいですか? 手がかりはありますか?

適切な場所でスクリプトを探しているかどうかはわかりませんが、これは「1」がある唯一のエントリであり、エラー メッセージで確認するように指示されています...

マニュアルを確認したところ、SQL の構文は正しいようです... WAMP サーバーでMySQL 5.5.24を使用しています。

ユーザー認証用に「 Login-Redirect v1.31 」をインストールしようとしています。

誰かが私を助けることができれば、本当に感謝しています!

4

4 に答える 4

8

止まる

このコードを先に進める前に、SQL インジェクション攻撃について読んで、コードを修正してください。

構文エラーは、間違いなく、'クエリに挿入しているデータのどこかに余分なものがあるため、インジェクション エラーが原因であることがほぼ確実です。ユーザーが提供した生のデータをクエリに渡しているため、悪意のあるユーザーがサーバーを乗っ取ったり、データベースを破壊したり、犬を蹴ったりすることができます...

これを超えて、echo $sqlここに結果を貼り付けてください。どこが悪いのかを正確に示すことができます'.

于 2012-08-27T14:56:55.887 に答える
0

最初のステップは、クエリのどの部分が参照されているかを分離することです。

エラーは、列の参照とフィールドの挿入です。

を渡しているよう'1'です。'1'は文字列です1が、 は整数です。

列スキーマが列タイプであると言う場合はint、一重引用符を削除して再試行してください。

于 2012-08-27T14:58:31.463 に答える
0

手始めにこれを行います:

  1. ステートメントを使用しechoて $sql を画面に出力 (またはファイルに記録) します。

  2. ステートメントをお気に入りの SQL エディターにコピーし、エラーを見つけようとして作業します。

コードの実行時にどの変数がバインドされるかを知らずに、動的 SQL ステートメントをデバッグするのは困難です。

于 2012-08-27T14:59:08.910 に答える
0

この問題で私を助けてくれてありがとう。

変数にan を印刷する$echoと、答えが得られました。問題は、$_POST[redirect_to]以前は適切に定義されていなかったため、機能していないことです。

入力変数を空の文字列に変更したところ、うまくいきました:

$sql = "INSERT INTO $_SESSION[table_name] VALUES 
        ('$_POST[first_name]', '$_POST[last_name]', '$_POST[user_name]', 
        password('$_POST[password]'), 'Administrators', '', '', '0', 
        '$_SESSION[admin_email]', ' ', '1', '$date')";

$result = @mysql_query($sql,$connection) or die(mysql_error());

if($result){
    // ...
}

私は脆弱性を研究して解決しますSQL injections。私はこれに非常に慣れていません。

訂正とアドバイスありがとうございます!

于 2012-08-28T16:18:54.843 に答える