可能重复:
Import CSV to mysql
我需要一些帮助:
我正在尝试使用php将.csv文件导入mysql数据库,而不是通过phpmyadmin手动执行。
这是我目前的代码:
if($_REQUEST['func'] == "iid"){
$db->conn = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME) or
die('There was a problem connecting to the database.');
$csv = $_POST['csv-file'];
$path = $csv;
$row = 1;
if (($handle = fopen($path, "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
$row++;
$data_entries[] = $data ;
}
fclose($handle);
}
// this you'll have to expand
foreach($data_entries as $line){
$sql = $db->conn->prepare('INSERT INTO `bd_results`');
$db->execute($line);
}
}
但是我收到以下错误:
Fatal error: Call to undefined method stdClass::execute() in /homepages/19/d372249701/htdocs/business-sites/bowlplex-doubles-new/admin/scores.php on line 44
作为参考,我使用的代码来自:Here
我不熟悉我习惯使用mysql_connect的$ db-> conn业务!所以任何帮助都会受到赞赏。
答案 0 :(得分:1)
试试这个简单的。
if (($handle = fopen("google.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$db->conn->query("INSERT INTO values('" . implode('\',\'', $data) . "');");
}
fclose($handle);
}
如果CSV值没有引号,您的脚本可能还需要为CSV值添加引号。如果您需要处理CSV文件中的引号和所有内容,我建议您查看http://www.fusionswift.com/2012/07/php-import-csv-to-mysql/
上的博客文章答案 1 :(得分:0)
foreach($data_entries as $line) {
$stmt = $db->conn->prepare('INSERT INTO `bd_results` (field1, field2) VALUES (?, ?)');
$stmt->bindParam('ss', $field1Value, $field2Value);
list($field1Value, $field2Value) = $line
$stmt->execute();
}
其中$ field1Value是第一个CSV列,$ field2Value是第二个CSV列,两者都是string类型,在bindParam()
方法中指定。
基本上,您需要完整地准备查询,然后您可以为其分配变量,一旦变量具有所需的值,您就可以使用execute()
方法执行查询。
这是您使用预准备语句的方式。就个人而言,我会考虑Mahn的建议,并避免使用预备语句来完成这样的任务,除非你需要在上面处理数据。