sql >> Database >  >> RDS >> Mysql

MySQL en PHP Onverwachte T_Variable

STOP

Rechtstreeks vanuit de post in een database invoegen is altijd een slecht idee. Dit is de reden waarom PHP momenteel vastzit met de zeer on-intuïtieve magische aanhalingstekens.

Je zou op zijn minst mysql_real_escape_string() moeten gebruiken om aan je gegevens te ontsnappen. Bijvoorbeeld:

$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);

De reden dat u dit moet doen, is gebaseerd op beveiliging. Bijvoorbeeld als een kwaadwillende het gebruikersnaamveld instelt op '); DROP TABLE users; zonder eerst aan uw gegevens te ontsnappen. Je zou uiteindelijk blindelings de volgende query uitvoeren:

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

Wat natuurlijk niet goed zal aflopen voor je sollicitatie.

Dit is het minimum je zou moeten doen.

In werkelijkheid zou je echt moeten overstappen op MySQLi Dat is een veel modernere MySQL-interface. Hier is een voorbeeld

$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);

U kunt MySQL zelfs procedureel gebruiken. Dus als objectgeoriënteerd programmeren nog niet binnen je bereik ligt, heb je geen problemen met MySQLi.

Ik hoop dat dat helpt.



  1. Amazon RDS voor PostgreSQL-alternatieven - ClusterControl voor PostgreSQL

  2. Het uitvoeringsplan van de query in postgresql handmatig wijzigen?

  3. Query die exact aantal rijen retourneert

  4. MySQL-fout 1022 bij het maken van een tabel