2011-08-29 26 views
8

Ho un'istruzione INSERT in un file PHP in cui at-signs (@) si verificano davanti al nome della colonna.Istruzione SQL prima della firma prima del nome della colonna

@ campo1, @ field2,

Si tratta di un database MySQL. Cosa significa l'at-sign?

Edit:
Non c'è SET @field1 := 'test' nello script PHP. Lo script PHP legge un csv e inserisce i dati nella tabella. Può essere usato in modo errato come commento?

<?php 
$typo_db_username = 'xyz'; // Modified or inserted by TYPO3 Install Tool. 
$typo_db_password = 'xyz'; // Modified or inserted by TYPO3 Install Tool. 

// login 
$_SESSION['host'] = "localhost"; 
$_SESSION['port'] = "3306"; 
$_SESSION['user'] = $typo_db_username; 
$_SESSION['password'] = $typo_db_password; 
$_SESSION['dbname'] = "database"; 


$cxn = mysqli_connect($_SESSION['host'], $_SESSION['user'], $_SESSION['password'], $_SESSION['dbname'], $_SESSION['port']) or die ("SQL Error:" . mysqli_connect_error()); 
mysqli_query($cxn, "SET NAMES utf8"); 

$sqltrunc = "TRUNCATE TABLE tablename"; 
$resulttrunc = mysqli_query($cxn,$sqltrunc) or die ("Couldn’t execute query: ".mysqli_error($cxn)); 

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

$result1 = mysqli_query($cxn,$sql1) or die ("Couldn’t execute query: " . mysqli_error($cxn)); 


?>' 

SOLUZIONE:

Infine, ho trovato fuori! Il campo @ è usato come manichino per saltare una colonna in un file csv. Vedi http://www.php-resource.de/forum/showthread/t-97082.html http://dev.mysql.com/doc/refman/5.0/en/load-data.html

+0

@testing - Vedo che hai aggiunto un "possibile duplicato" nella tua stessa domanda, quindi votato a distanza su tale base. Puoi chiarire che risponde alla tua domanda? –

+0

Non è un duplicato, i collegamenti richiedono la differenza tra una normale var e una '@ var', questa domanda si chiede cosa significhi' @ xyz' in una query. – Johan

+0

Sarebbe più semplice ottenere specifiche se si include il ** codice php ** rilevante con la query al suo interno. – Johan

risposta

8

Il @ segno è una variabile in SQL.

In MySQL viene utilizzato per memorizzare un valore tra esecuzioni consecutive di una query o per trasferire dati tra due query diverse.

Un esempio

trasferire i dati tra due query

SELECT @biggest:= MAX(field1) FROM atable; 
SELECT * FROM bigger_table WHERE field1 > @biggest; 

Un altro utilizzo è in classifica, che MySQL non ha il supporto nativo per.

Conservare un valore per esecuzioni consecutive di una query

INSERT INTO table2 
    SELECT @rank := @rank + 1, table1.* FROM table1 
    JOIN(SELECT @rank := 0) AS init 
    ORDER BY number_of_users DESC 

Nota che, per far funzionare tutto questo, l'ordine in cui le righe vengono elaborate nella query deve essere fissato, è facile da ottenere questo sbagliato

See:
http://dev.mysql.com/doc/refman/5.0/en/user-variables.html
mysql sorting and ranking statement
http://www.xaprb.com/blog/2006/12/15/advanced-mysql-user-variable-techniques/

UPDATE
Questo codice non funzionerà mai.
Hai appena aperto la connessione e nessun luogo è il set @fields.
Quindi attualmente contengono valori null.
Per di più, non è possibile utilizzare @vars per indicare nomi di campo, è possibile solo utilizzare @vars per i valori.

$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)"; 
+0

Il valore può essere memorizzato in un altro script php? Può essere utilizzato oltre i confini di un file php? Perché i valori non sono mai impostati nello script che ho ... – testing

+0

No, '@ vars' sono specifici della connessione. Non è possibile trasferirli tra le connessioni. – Johan

+0

Lo script non viene da me. Devo correggerlo ... Vuoi dire che i valori nulli sono importati. Quale conseguenza ha questo? La soluzione migliore sarebbe quella di sostituire o rimuovere quei campi? – testing

Problemi correlati