Знак @
является переменной в SQL.
В MySQL он используется для хранения значения между последовательными запусками запроса или для передачи данных между двумя различными запросами.
Пример
Передача данныхмежду двумя запросами
SELECT @biggest:= MAX(field1) FROM atable;
SELECT * FROM bigger_table WHERE field1 > @biggest;
Другое использование - ранжирование, для которого MySQL не имеет встроенной поддержки.
Сохранение значения для последовательных прогонов запроса
INSERT INTO table2
SELECT @rank := @rank + 1, table1.* FROM table1
JOIN( SELECT @rank := 0 ) AS init
ORDER BY number_of_users DESC
Обратите внимание, что для того, чтобы это работало, порядок, в котором строки обрабатываются в запросе, должен быть исправлен, легко ошибиться.
См .:
http://dev.mysql.com/doc/refman/5.0/en/user-variables.html
MySQL сортировка и ранжирование
http://www.xaprb.com/blog/2006/12/15/advanced-mysql-user-variable-techniques/
ОБНОВЛЕНИЕ
Этот код никогда не будет работать.
Вы только что открыли соединение раньше, и нигде не установлены @fields.
Так что в настоящее время они содержат null
значений.
Кроме того, вы не можете использовать @vars для обозначения имен полей , вы можете только использовать @vars для значений.
$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)";