我的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。但是,由于这不是我的能力领域,所以我没有,也无法更新我对这些主题的了解。 因此,我希望你忽略所有的安全和老派功能用途。我(和我的雇主)决定不聘请开发人员,因此不关心这些问题:-) –