2011-08-29 2 views
8

カラム名の前にアットマーク(@)が現れるPHPファイルにINSERT文があります。at-Sign inカラム名の前のSQL文

フィールド1 @

、フィールド2 @ 、

これは、MySQLデータベースです。アットマークは何を意味しますか?

編集:
PHPスクリプトにはSET @field1 := 'test'はありません。 PHPスクリプトはcsvを読み込み、そのデータをテーブルに格納します。コメントアウト機能として誤用される可能性はありますか?

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


?>' 

SOLUTION

は最後に、私はそれを見つけました! @フィールドは、ダミーとして使用され、csvファイル内の列を逃します。 http://www.php-resource.de/forum/showthread/t-97082.html http://dev.mysql.com/doc/refman/5.0/en/load-data.html

+0

@testing - 私はあなた自身の質問に "可能な重複"を追加しましたので、その基準に近い投票でチャックしました。あなたはあなたの質問に答えますか? –

+0

これは欺瞞ではない、リンクが普通のvarと '@ var'の違いを尋ねると、この質問はクエリの中で' @ xyz'が何を意味するのかを尋ねます。 – Johan

+0

**関連** PHPコードにクエリーを含めると、具体的になる方が簡単です。 – Johan

答えて

8

@記号はSQLの変数です。

MySQLでは、クエリの連続実行の間に値を格納したり、2つの異なるクエリ間でデータを転送したりするために使用されます。 2つのクエリ

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 sorting and ranking statement
http://www.xaprb.com/blog/2006/12/15/advanced-mysql-user-variable-techniques/

UPDATE
は、このコードは動作しません。
あなたは接続を開いたばかりです。@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)"; 
+0

値は別のPHPスクリプトに保存できますか?それは、PHPファイルの境界を超えて使用することはできますか?値が決してスクリプトに設定されていないので、私は... – testing

+0

いいえ、 '@ vars'は接続に特有のものです。接続間でそれらを転送することはできません。 – Johan

+0

スクリプトは私のものではありません。私はそれを修正する必要があります...あなたはnull値がインポートされることを意味します。これにはどのような影響がありますか?最良の解決策は、そのフィールドを置き換えるか、または削除することでしょうか? – testing

関連する問題