我正在尝试将CSV文件导入MySQL数据库,但没有成功。
我的数据库中有5列:
ID, userID, moviID,速率,时间戳
在我的CSV文件中,只有4列由两个冒号“::”分隔。
这是示例数据:
1::1193::5::978300760
这是我的问题
$query=“将数据填充“$uploadfile”到表评级\以“::”结尾的表字段中,行以“\n”(userID、movieID、rate、timestamp)结尾);
我使用的是PDO_MySQL
这是额外的代码,您可以理解。
$stmt = $dbh->prepare($query);
try{
if($stmt->execute()){
echo "Sucessful importing of CSV file into the MySQL database!";
}
}
catch (PDOException $e) {
echo "Error importing of CSV file into the MySQL database!";
echo "Error!: " . $e->getMessage() . "<br/>";
die();
}
echo "</p>";
我尝试过很多次,但当我签入数据库时,它仍然是空的。
我似乎不知道出了什么问题,你能帮我吗?谢谢
这就是我犯的错误。
致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[HY000]:一般错误:2014无法在其他未缓冲查询处于活动状态时执行查询。考虑使用pdoCalp::FutAccess()。或者,如果您的代码只在html" target="_blank">mysql上运行,您可以通过设置PDO::mysql_ATTR_USE_BUFFERED_query属性来启用查询缓冲。在C:\xampp\htdocs\movie\php\upload_file.php:57堆栈跟踪:#0 C:\xampp\htdocs\movie\php\upload_file.php(57):PDO语句中-
这是我的连接设置:
$dbh=new PDO('mysql: host=localhost; dbname=电影','根', '', 数组(PDO::MYSQL_ATTR_INIT_COMMAND=
您可能在LOAD DATA INFILE语句中缺少LOCAL
关键字。
LOCAL
表示从中加载的文件位于客户端而不是服务器上。我刚用你的桌子和文件试过这个,效果很好。
> cat infile.csv
1::1193::5::978300760
> mysql
mysql > create table ratings (
id int primary key auto_increment,
userID int,
movieID int,
rate int,
ts long);
Query OK, 0 rows affected (0.06 sec)
mysql > LOAD DATA LOCAL INFILE 'infile.csv' INTO TABLE ratings FIELDS TERMINATED BY '::' LINES TERMINATED BY '\n' ( userID, movieID, rate, ts);
Query OK, 1 row affected (0.00 sec)
Records: 1 Deleted: 0 Skipped: 0 Warnings: 0
mysql > select * from ratings;
+----+--------+---------+------+-----------+
| id | userID | movieID | rate | ts |
+----+--------+---------+------+-----------+
| 1 | 1 | 1193 | 5 | 978300760 |
+----+--------+---------+------+-----------+
1 row in set (0.00 sec)
要查看输出上的错误消息,只需使用PDO::ERRMODE_EXCEPTION
初始化PDO,如下所示:
$db = new PDO('mysql:host=' . $config['db_host'] . ';dbname=' . $config['db_name'], $config['db_username'], $config['db_password'],
array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES UTF8",
PDO::ATTR_EMULATE_PREPARES => FALSE,
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => TRUE,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
));
之后,您将能够看到错误。将其发布在更新中,我/我们将能够帮助您!
请看一下关于PDO_MYSQL的手册。
您可能还需要:
PDO::MYSQL_ATTR_LOCAL_INFILE => TRUE
注意,在构造新的数据库句柄时,此常量只能在driver_options数组中使用。
根据MySQL手册,MySQL的编译必须使用——启用本地infle
:
您必须使用MySQL的完整路径编译PHP,否则它将使用内部处理程序,而内部处理程序不能处理“新”加载数据。
--使用mysql=/usr/local/mysql(假设您的mysql位于此处)
你必须启动MySQL守护进程的选项--local-infile=1
或者启用它,通过添加到您的/etc/my.cnf
:
[mysql]
local-infile=1
[mysqld]
local-infile=1
重启mysqld
之后,通过运行服务mysqld restart
。
引号用于字符串文字,背勾用于列和表名称。正确转义变量。将查询更改为:
$query = "LOAD DATA INFILE ' . $uploadfile . ' INTO TABLE `rating_table` FIELDS TERMINATED BY '::' LINES TERMINATED BY '\n' ( `userID`, `movieID`, `rate`, `timestamp`)";
当您同时打开多个查询时,通常会导致此错误。例如,您调用fetch()
,但直到调用完成后才调用它,然后尝试执行第二个查询。
通常,此问题的解决方案是调用closeCursor()
PHP:PDOStatement::closeCursor-Manual。试着称之为:
/* The following call to closeCursor() may be required by some drivers */
$stmt->closeCursor();
/* Now we can execute the second statement */
$otherStmt->execute();
看看这对你有什么影响。
尝试使用其他语法来转义变量。使用以下命令:
$stmt = $dbh->prepare("
LOAD DATA INFILE
'" . $uploadfile . "'
INTO TABLE
`rating_table`
FIELDS TERMINATED BY
'::'
LINES TERMINATED BY
'\n' ( `userID`, `movieID`, `rate`, `timestamp`)
");
$stmt->execute();
PDO占位符只能用于值,而不能用于数据库、表或列名!我认为错误来自于使用'::'
。将文件中的数据分隔符从'::'
更改为,比方说'.'
。
作为检查的快速解决方案,您可以直接使用查询,而无需准备:
$stmt = $dbh->query("
LOAD DATA INFILE
'" . $uploadfile . "'
INTO TABLE
`rating_table`
FIELDS TERMINATED BY
'::'
LINES TERMINATED BY
'\n' ( `userID`, `movieID`, `rate`, `timestamp`)
");
如果它不起作用,尝试更改数据分隔符或尝试以某种方式转义现有的分隔符(::
)。
在我的应用程序中,我正在扫描广告BLE设备,我想在一个回收视图中显示结果。我可以很好地扫描设备,但它们没有被添加到RecyclerView中。我在主activity中创建了一个对话片段: 下面是包含RecyclerView的片段的布局文件: 以下是扫描结果项的布局: 下面是recyclerview适配器: 在函数loadScanResults中,我可以确认扫描的结果。在我心目中,它应该像在onCr
我正在将一个CSV文件中的20000行数据导入Mysql。 CSV中的列与MySQL表中的列的顺序不同。如何自动分配Mysql表列对应的列? 当我执行 此查询将所有数据添加到第一列。 请建议将数据导入Mysql的自动语法。
series(string $value,[ string $categories]) string $value $config = ['path' => './tests']; $fileObject = new \Vtiful\Kernel\Excel($config); $fileObject = $fileObject->fileName('tutorial.xlsx'); $
factory 辅助函数 必须 使用 factory 方法来做数据填充,因为是框架提倡的,并且可以同时为测试代码服务。 运行效率 开发数据填充时,必须 特别注意 php artisan db:seed 的运行效率,否则随着项目的代码量越来越大,db:seed 的运行时间会变得越来越长,有些项目多达几分钟甚至几十分钟。 原则是: Keep it lighting speed. 只有当 db:seed
问题内容: 建议使用JQuery数据表。现在,我需要用从控制器发送的一堆json对象填充网格。我如何从JS在网格上发送此数据 更新 我已经找到了这些链接,但是我不知道如何实现它。 问题答案: 您应该使用JQuery DataTable sAjaxSource属性来指定ajaxsource,在这种情况下,它将是/ HomeReturnJsonData 以下是一个例子
问题内容: 我有两个模型要参考。风格和品牌。 品牌填充了所需的对象,但样式始终为空。 我试过清除缓存/删除索引。有和没有include_in_parent并键入:’nested’。 我觉得这可能与指定的es_type等有关。不确定。 产品架构: 样式架构: 搜索查询: 当我查询时,得到以下结果: 关于评论请求: 产品已添加到数据库: 前/角: 问题答案: 我已经工作了,但是它与npm / gith