$db_config
. का आपका उपयोग चर मुझे संदिग्ध लग रहा है। या तो आपका कॉन्फ़िगरेशन हैश अजीब है, या आप कुंजियों के बजाय मानों का उपयोग कर रहे हैं।
आपने हमें यह नहीं दिखाया है कि $db_config
. कहां है सेट अप है, लेकिन मुझे लगता है कि यह कुछ इस तरह दिखता है:
$db_config = {
name => 'Top_Data',
host => '127.0.0.1',
port => 3306,
username => 'someone',
password => 'a secret',
};
और फिर आप इसे इस तरह इस्तेमाल करेंगे:
my $dsn = "DBI:mysql:database=".$db_config->{name}.";host=".$db_config->{host}.";port=".$db_config->{port};
ध्यान दें कि मैंने मुख्य नामों का उपयोग किया है (name
, host
और port
) मानों के बजाय (Top_Data
, 127.0.0.1
और 3306
)।
मैं यह भी बताऊंगा कि डबल-उद्धृत स्ट्रिंग के अंदर चर का विस्तार करने की पर्ल की क्षमता का उपयोग करके आप इसे थोड़ा सरल बना सकते हैं।
my $dsn = "DBI:mysql:database=$db_config->{name};host=$db_config->{host};port=$db_config->{port}";
बाद में आपके SQL कथन के साथ एक और समस्या है।
my $sql = 'insert into Top(Load_Average, CPU_us, CPU_id, CPU-wa, CPU_hi,
CPU_si, CPU_st, Swap_Total, Swap_Free, Swap_Used, Memory_Total,
Memeory_Free, Memory_Used, Memory_Buff, Date)
values(float,float,float,float,float,float,float,float,
varchar,varchar,varchar,varchar,varchar,varchar,date)';
आपको जो मान डालने चाहिए, वे वास्तविक डेटा आइटम हैं। तो जहां आपके पास "फ्लोट", "वर्कर" या "डेट" तार हैं, आपके पास वास्तव में डेटा आइटम (एक फ़्लोटिंग-पॉइंट नंबर, एक स्ट्रिंग या दिनांक) होना चाहिए।
अंत में, अपना विवरण तैयार करने के बाद, आपको इसे execute()
. पर भेजने की आवश्यकता नहीं है तरीका। हालाँकि, आपको अपने SQL में बाइंड पॉइंट्स का उपयोग करना चाहिए और अपने वास्तविक डेटा आइटम्स को execute()
पर पास करना चाहिए। कॉल करें