我是一個MySQL新手,完成了我的web應用程序的核心代碼塊。代碼導入一個由FileMaker生成並清除的CSV文件(本地),並保留它。錯誤捕獲的最佳方法LOAD DATA LOCAL INFILE?
鑑於這將會在某個時間點快速投入生產(並且可能是500MB以下的數據庫),我很想知道是否有更好的錯誤檢查/捕獲功能,以便我可以在可能的情況下防止出現問題或者通知我的服務器設置。我已經閱讀了關於臨時日誌等的內容,而且我的MySQL管理還沒有達到鼻菸。
非常基本的代碼是:
$m = mysql_connect('localhost', 'mytable', 'mypassword');
$db = 'mydb';
mysql_select_db($db) or die("Import Error - Couldn't select database: " . mysql_error());
$sql = 'load data local infile "inventory.csv"
into table ibl_account_details_temp fields terminated by ","
optionally enclosed by "\""
lines terminated by "\r"
(store_id, SKU, account, item_number, brand, description, size, category, price, qty, fees)
';
echo mysql_query($sql) or die(myqsl_error());
PS編輯:我也很想知道,如果進口的這種方法是開放的SQL注入?
我看不到執行'LOAD DATA INFILE'會有什麼樣的風險,因爲MySQL沒有執行CSV文件的內容,它只是將它解析爲CSV。當然,這並沒有提到二次攻擊的風險,但只要每個需要輸入(包括來自查詢結果的輸入)的查詢都使用參數化,就應該是安全的。出於這個原因(除其他外),你應該使用mysqli或PDO來訪問mysql而不是mysql_ *函數。 –
我之前使用了一個簡單的插入語句,而fgetcsv在我的18mb文件中內存不足。我無法解決這個問題,並在主機128MB的RAM上運行,並且需要保持這個工作。也就是說,我使用PDO的每個其他地方;-) – SWL
當然,我不反對使用'LOAD DATA INFILE'導入CSV,這就是它的用途。 –