@
tecken är en variabel i SQL.
I MySQL används det för att lagra ett värde mellan på varandra följande körningar av en fråga, eller för att överföra data mellan två olika frågor.
Ett exempel
Överför data mellan två frågor
SELECT @biggest:= MAX(field1) FROM atable;
SELECT * FROM bigger_table WHERE field1 > @biggest;
En annan användning är i rankning, som MySQL inte har inbyggt stöd för.
Lagra ett värde för på varandra följande körningar av en fråga
INSERT INTO table2
SELECT @rank := @rank + 1, table1.* FROM table1
JOIN( SELECT @rank := 0 ) AS init
ORDER BY number_of_users DESC
Observera att för att detta ska fungera måste ordningen i vilken raderna bearbetas i frågan fixas, det är lätt att få fel.
Se:
http://dev.mysql .com/doc/refman/5.0/en/user-variables.html
mysql-sorterings- och rankningsuttalande
http:// www.xaprb.com/blog/2006/12/15/advanced-mysql-user-variable-techniques/
UPPDATERA
Den här koden kommer aldrig att fungera.
Du har precis öppnat anslutningen tidigare och ingenstans är @fälten inställda.
Så för närvarande håller de null
värden.
Till råga på det kan du inte använda @vars för att ange fältnamn , du kan bara använd @vars för värden.
$sql1 = "
LOAD DATA LOCAL INFILE 'import.csv'
REPLACE INTO TABLE tablename
FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '\"'
IGNORE 1 LINES
(`normalField`, @field1, @field2, `normalField2`, @field3, @field4)";