3

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' at line 1

これは、テーブルから選択する以外に持っている私のSQLコードです。私はこれをすべてコメントアウトしましたが、エラーは発生しなかったので、このコードブロックでエラーが発生していると想定しています。

    if($status === 1){
        $sqlQ = mysql_query("UPDATE tablename SET status=1 WHERE steam64='$id'");

        if(!mysql_query($sqlQ, $con)){
            die('Error: ' . mysql_error());
        }
    }else if($status !== 1){
        $sqlQ = mysql_query("UPDATE tablename SET status=2 WHERE steam64='$id'");

        if(!mysql_query($sqlQ, $con)){
            die('Error: ' . mysql_error());
        }
    }

私を本当に混乱させているのは、1行目の部分です。

4

5 に答える 5

3

あなたはDRYの原則に大きく違反しています。なぜ...

$statusValue = ($status === 1) ? 1 : 2;
$sqlQuery = mysql_query("UPDATE `14d2_group` SET `status` = $statusValue WHERE `steam64` = '$id'"):

更新 2: 追加の説明が必要なようです。

mysql_query関数はクエリを作成するだけでなく、実際に MySQL に送信し、結果を返します。UPDATE の場合、クエリが失敗すると FALSE を返します。そのため、元の例で行ったように、mysql_query を 2 回呼び出すべきではありません。

実際に何行更新されたかはmysql_affected_rows関数で確認できます。

更新 3: ついに入手。) それがエラーが表示された理由です:最後の更新クエリの結果でmysql_query を呼び出そうとしました。TRUE が文字列に変換されると、これは '1' にすぎません。)

于 2012-04-27T22:38:21.100 に答える
2

1 つのクエリの結果をクエリ自体として使用しています。

おそらくやりたいことは次のとおりです。

if($status === 1){
    $sqlQ = mysql_query("UPDATE tablename SET status=1 WHERE steam64='$id'");

    if (!$sqlQ) {
        die('Error: ' . mysql_error());
    }
}
else {// no need for your if-statement here because it would always be true
    $sqlQ = mysql_query("UPDATE tablename SET status=2 WHERE steam64='$id'");

    if(!$sqlQ){
        die('Error: ' . mysql_error());
    }
}
于 2012-04-27T23:18:26.893 に答える
1

「Line 1」は、それを呼び出すスクリプトではなく、クエリの 1 行目に対応します。それを呼び出すスクリプトの行を追加するには、次を使用します。

die('Error: ' . mysql_error() . ' in ' . $_SERVER['PHP_SELF'] . ' on line ' . __LINE__ );

クエリに関しては、何も飛び出していません。私が今持っている唯一の提案は、フィールド名がキーワードである場合に備えて、常にバッククォートで囲むことです (これにより、読みやすくなります)

また、あなたelse ifは冗長です。$status === 1実行されない場合は、明らかに真で$status !== 1 なければなりません。

于 2012-04-27T22:36:43.013 に答える
0

型キャストのためstatus=1、問題ありません。何か問題があると思い$idます。$id他の安全な値 (1, 'foo'...) に変更したら、それが機能するかどうかを確認します。

于 2012-04-27T22:52:10.507 に答える
-1

「1 行目」の部分は、受信したメッセージの 1 行目 (SQL が処理しようとしたコマンドの最初の行) でエラーが発生したことを示す SQL です。

推測する必要がある場合は、ステータスが数値型に設定されていないため、変数が渡されていることを SQL が認識できるように、ステータスを引用符で囲む必要があります。

編集:OK、他の解決策も正しいかもしれません。私たちはあなたのデータ構造について異なる仮定をしましたが、彼の方が優れていると思います。まず試してみてください。

于 2012-04-27T22:36:11.547 に答える