2015-04-24 72 views
0

我試圖做到這一點通過execlp().嘗試通過將sql文件導入到遠程數據庫。 C程序

的代碼是:

if(execlp("mysql","mysql","-e \"source /single.sql\" -ppasswd --host 10.240.253.155 Dbname",(char*)0) == -1) 

但我收到此錯誤:當我通過終端輸入相同的文件

ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check 
the manual that corresponds to your MariaDB server version for the right 
syntax to use near '"source /query.sql" -ppasswd --host 10.240.253.155 gdas 

雖然它工作正常。

mysql -e "source ./query1.sql" -ppasswd -h10.240.253.155 dbname. 

通常這個sql文件只包含Insert查詢沒有別的。從sql文件

樣本:

INSERT INTO 
gd_stats(client_IP,virtual_Host,ip_version,pOP,pOP_IP,pOP_Load,pOP_Hit_Stat,request_time,reply_time,time_req) 
VALUES('10.240.253.10','service1.in',4,    
'NORTH_AMERICA','10.240.253.15',0,1,'04-20-2015 12:54:32','04-20-2015 
12:54:32',7881); 

我認爲他們可能與此sql文件有問題(因爲它僅包含插入查詢),所以創建通過mysqldump一個sql轉儲然後試圖導入轉儲文件但仍然是相同的錯誤。

數據庫存在於遠程主機中。

我使用MariaDB的:

mysql Ver 15.1 Distrib 5.5.41-MariaDB 

,並試圖實現這一目標上rhel

+0

我已經嘗試過「--default字符集= UTF8」,但仍然得到同樣的errror。 –

回答

1

您需要單獨將每個參數傳遞給命令exec將整個字符串"-e \"source /single.sql\" -ppasswd --host 10.240.253.155 Dbname"作爲單個參數發送到命令。也就是說,整個字符串將通過argv[1]傳遞給mysql命令。

所以做而不是

execlp("mysql", "mysql", "-e", "source /single.sql", "-ppasswd", "--host", "10.240.253.155", "Dbname", NULL) 
+0

可以寫命令,因爲我已經試過,但得到數據庫丟失.. –

+0

沒有這沒有幫助,在應用這個後,整個程序崩潰... 而錯誤是由'mysql'拋出不'execlp'。 –

+0

@PrabhatKumarSingh是的錯誤來自'mysql'程序,因爲它無法解析參數。你傳遞給exec函數的參數就是被調用程序中的'argv'數組。如果你遇到碰撞,那是因爲別的。 –

相關問題