4

MySQL5.5.24とPHP5.4.3に問題があります。私は次のHTML/PHPコードを持っています:

<?php
function connect() {
    $con = mysql_connect( "127.0.0.1", "root", "" );
    if ( !$con ) {
        die( "Could not connect: " . mysql_error() );
    }
    mysql_select_db( "game" );    
}

function protect( $string ) {
    return mysql_real_escape_string( strip_tags( addslashes( $string ) ) );
}


if ( isset( $_POST[ 'register' ] ) ) {
    connect();
    $username = protect( $_POST[ 'username' ] );    
    $register = mysql_query( "SELECT 'id' FROM 'user' WHERE 'username'='$username'" ) or die( mysql_error() );
    if ( mysql_num_rows( $register ) > 0 ) {
        echo "That username is already in use!";
    } else {
        $ins = mysql_query( "INSERT INTO 'user' ('username') VALUES ('$username')" ) or die( mysql_error() );
        echo "You have registered!"; 
    } 
}
?>
<form action="register.php" method="POST">           
Username: <input type="text" name="username"/><br/>
<input type="submit" name="register" value="Register"/>
</form>

私が何を入力しても、MySQLは常に戻ります

"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 ''user' WHERE 'username'='XXX'' at line 1"

これらのクエリをphpmyadminで確認したところ、問題なく機能しました。接続の問題もありません。"SELECT * FROM 'user'"私も同じ結果でプレーンを試しました。不正な形式のSQL構文に関する前述のエラーだけで、応答がありません。

今、私は同じエラーを持っているたくさんの記事をチェックしました、そしてそれぞれの場合に問題はPHPのキーワードを使用したか、変数名とその種類の欠落/スペルミスでした。私は今、自分のステートメントを100回チェックしましたが、エラーは見つかりませんでした。私はPHPに慣れていないので、何かが恋しいかもしれません...

私の最後の実験の1つは、データベースとストレージエンジンの照合を変更することでしたが、結果はありませんでした...

皆さんが私ができないことを見てくれることを願っています!:-)

ところで、私はWindows7とWAMP2.2を実行しています。

4

2 に答える 2

3
SELECT 'id' FROM 'user' WHERE 'username'

(バッククォート)'に変更`

テーブル名と列名について話していることは、バッククォートを使用する必要があります。文字列(値など)について話している場合は、一重引用符/二重引用符を使用します

于 2012-12-25T00:12:39.413 に答える
1

名前を書くときは、(引用符ではなく)バッククォートを使用する必要があります。

SELECT `id` FROM `user` WHERE `username` = 'foo'

引用符は文字列リテラル用です。

ちなみにあなたのprotect関数は悪い考えです。非推奨のmysql_*関数は使用しないことをお勧めします。mysqliまたはPDOのいずれかでパラメーター化されたクエリを使用します。

関連している

于 2012-12-25T00:12:48.113 に答える