2011-08-29 23 views
8

से पहले SQL कथन में साइन-इन करें मेरे पास एक PHP फ़ाइल में एक INSERT कथन है जिसमें कॉलम नाम के सामने एट-सिग्नल (@) होते हैं।कॉलम नाम

@ field2

यह एक MySQL डेटाबेस है

@ फ़ील्ड 1,,। एट-साइन का मतलब क्या है?

संपादित करें:
वहाँ PHP स्क्रिप्ट में कोई SET @field1 := 'test' है। PHP स्क्रिप्ट एक सीएसवी पढ़ता है और डेटा को तालिका में रखता है। क्या इसे एक टिप्पणी आउट फीचर के रूप में दुरुपयोग किया जा सकता है?

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


?>' 

समाधान:

अंत में, मैं यह पता चला! @ फ़ील्ड को csv-file में कॉलम को याद करने के लिए डमी के रूप में उपयोग किया जाता है। देखें http://www.php-resource.de/forum/showthread/t-97082.html http://dev.mysql.com/doc/refman/5.0/en/load-data.html

+0

@ टेस्टिंग - मुझे लगता है कि आपने अपने प्रश्न में "संभावित डुप्लिकेट" जोड़ा है, इसलिए उस आधार पर एक करीबी वोट में चकित हो गया। क्या आप स्पष्टीकरण दे सकते हैं जो आपके प्रश्न का उत्तर देते हैं? –

+0

यह एक डुप्ली नहीं है, लिंक सामान्य var और 'var 'के बीच अंतर पूछता है, यह प्रश्न पूछता है कि क्वेरी में' xyz' क्या है। – Johan

+0

यदि आप ** प्रासंगिक ** php-code में क्वेरी के साथ शामिल करते हैं तो यह विशिष्ट होना आसान होगा। – Johan

उत्तर

8

@ साइन इन एसक्यूएल में एक चर है।

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 sorting and ranking statement
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)"; 
+0

क्या मूल्य किसी अन्य PHP स्क्रिप्ट में संग्रहीत किया जा सकता है? क्या इसका उपयोग php फ़ाइल की सीमाओं पर किया जा सकता है? चूंकि मान स्क्रिप्ट में कभी सेट नहीं होते हैं ... – testing

+0

नहीं, '@ वर्स' कनेक्शन विशिष्ट हैं। आप कनेक्शन के बीच उन्हें स्थानांतरित नहीं कर सकते हैं। – Johan

+0

लिपि मुझसे नहीं है। मुझे इसे सही करना है ... आपका मतलब है कि शून्य मान आयात किए जाते हैं। इसका क्या परिणाम है? सबसे अच्छा समाधान उन क्षेत्रों को प्रतिस्थापित या निकालना होगा? – testing

संबंधित मुद्दे