我的PHP腳本工作時遇到了一些麻煩。使用PHP腳本將CSV上傳到MySQL。問題
我想要實現的: 在子頁面上,我想要一個非常簡單的CSV文件上載到MySQL數據庫。它需要DROP或TRUNCATE表和CREATE或INSERT INTO,這取決於以前的解決方案,這個CSV文件中的一些數據。
我的問題是,現在什麼: 我用PHP和MySQL相當初學者,這樣遇到問題搞清楚爲什麼我的腳本不能正常工作。
我的代碼:
的PHP:
$connect = mysql_connect("host","user","pass");
mysql_select_db("database",$connect); //select the table
if ($_FILES[csv][size] > 0) {
$file = $_FILES[csv][tmp_name];
$handle = fopen($file,"r");
mysql_query ("
CREATE TABLE IF NOT EXISTS `database`.`table` (
`item_number` VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_danish_ci NOT NULL ,
`item_desq` VARCHAR(200) CHARACTER SET utf8 COLLATE utf8_danish_ci NOT NULL ,
`item_img_path` VARCHAR(200) CHARACTER SET utf8 COLLATE utf8_danish_ci NULL ,
`item_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT ,
PRIMARY KEY ( `item_id`)
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_danish_ci
");
do {
if ($data[0]) {
mysql_query("
INSERT INTO strand_items1 (item_number, item_desq, item_img_path)
VALUES
(
'".addslashes($data[0])."',
'".addslashes($data[1])."',
'".addslashes($data[2])."
)
");
}
} while ($data = fgetcsv($handle,1000,";","\""));
header('Location: import_old.php?success=1'); die;
}
的HTML:
<body>
<form action="" method="post" enctype="multipart/form-data" name="form1" id="form1">
Choose your file: <br />
<input name="csv" type="file" id="csv" />
<input type="submit" name="Submit" value="Submit" />
</form>
</body>
的CSV:以CSV你的普通線看起來像這樣
"13371337";"Some description of the item";"NULL";
現在,結果:由此,我得到了一個「成功」的流程,但表中沒有數據,並且從我所能猜到的數據庫的某種類型的無限循環中,因爲它創建的數量不斷增加表中只有item_id自動遞增的表中空條目。 我哪裏錯了,是否有一個簡單的方法來解決這個問題?
這是我在這裏的第一個問題,我希望我能滿足所有要求。 (指出我的newb-ness;問題首先在meta.stackoverflow.com上發佈;))如果不是,請耐心等待 - 我將密切關注此問題,並快速回復任何回覆和requiests。
預先感謝您:)
您正在使用[**的過時**數據庫API](http://stackoverflow.com/q/12859942/19068),並應使用[現代替代](http://php.net/manual/en/mysqlinfo.api.choosing.php) 'addslashes'不足以防止[SQL注入攻擊](http:// bobby-tables.com/)(和一個現代的API會讓你更容易[防守](http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php)從他們)。 – Quentin
謝謝你的回覆Quentin。我意識到我缺少支持的SQL和PHP。但是,由於這不是我的能力領域,所以我沒有,也無法更新我對這些主題的瞭解。 因此,我希望你忽略所有的安全和老派功能用途。我(和我的僱主)決定不聘請開發人員,因此不關心這些問題:-) –