sql >> データベース >  >> RDS >> Mysql

MySQLとPHPの予期しないT_Variable

    停止

    投稿から直接データベースに挿入することは常に悪い考えです。これが、PHPが現在非常に直感的でない魔法の引用に固執している理由です。

    少なくともmysql_real_escape_string()を使用してデータをエスケープする必要があります。例:

    $link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
    OR die(mysql_error());
    
    $query = "INSERT INTO users VALUES (
        '" . mysql_real_escape_string($_POST["username"]) . "',
        '" . mysql_real_escape_string($_POST["sha_pass_hash"]) . "',
        '" . mysql_real_escape_string($_POST["email"]) . "',
        '2'
    )";
    
    mysql_query($query);
    

    これを行わなければならない理由は、セキュリティベースです。たとえば、悪意のあるユーザーがユーザー名フィールドを'); DROP TABLE users; 最初にデータをエスケープすることなく。やみくもに次のクエリを実行することになります:

    INSERT INTO users VALUES (''); DROP TABLE users;
    

    もちろん、これはアプリケーションにとってうまく終わらないでしょう。

    これは最小です やるべきです。

    実際には、MySQLi<に移行する必要があります。 / a> これははるかに最新のMySQLインターフェースです。例を次に示します

    $mysqli = new mysqli('mysql_host', 'mysql_user', 'mysql_password', 'mysql_database');
    
    $query = "INSERT INTO users VALUES (
        '" . $mysqli->real_escape_string($_POST["username"]) . "',
        '" . $mysqli->real_escape_string($_POST["sha_pass_hash"]) . "',
        '" . $mysqli->real_escape_string($_POST["email"]) . "',
        '2'
    )";
    
    $mysqli->query($query);
    

    MySQLを手続き型で使用することもできます。したがって、オブジェクト指向プログラミングがまだ手の届かないところにある場合は、MySQLiに問題はありません。

    お役に立てば幸いです。



    1. SQL Server 2012で相互適用を行う場合、および内部結合を行う場合

    2. iPhone:インターネット経由でデータベースに接続しますか?

    3. MySQLSyntaxErrorExceptionの近く? PreparedStatementを実行しようとしたとき

    4. 列内で最長の実行を見つけるためのmysqlクエリ