将数据导入mysql中,总是提示“DROP TABLE IF EXISTS XXX(我的表名)”出错,求大神指导!!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将数据导入mysql中,总是提示“DROP TABLE IF EXISTS XXX(我的表名)”出错,求大神指导!!相关的知识,希望对你有一定的参考价值。
我也遇到这个问题。要先选中某个数据库,然后导入到该数据库里。(之前是没选中数据库直接导入,然后一直导入不进去。。给后来的小朋友参考下o(^_^)o)。 参考技术A 导入数据,首先确定有没有数据库。额,你的sql语句要是没错的话,就看看表结构和你导入的数据结构一样不 参考技术B 表名和字段名的单引号要用键盘左上角叹号左边的引号 参考技术C 根据你的追问,你保存的数据通过程序来生成的或者是程序自带的数据。不是通过数据库中直接导出的。你可以通过程序后台来恢复导入数据。或者将数据文件中[dbpre] 替换成表前缀。然后在导入即可你看下原来的表前缀多少,替换成一样的就行了 参考技术D 大神不是神,虽然我也不是神,单还是建议你把详细错误信息列出来.
如果这句话不影响你导入数据库,这个提示也无所谓吧.追问
mysql Query Error: #DROP TABLE IF EXISTS [dbpre]activity
You have an error in your SQL syntax;……e near '#DROP TABLE IF EXISTS [dbpre]activity' at line 1
错误信息如上
PHP:CSV 导入 MYSQL 总是少于 CSV 文件中的实际行数?
【中文标题】PHP:CSV 导入 MYSQL 总是少于 CSV 文件中的实际行数?【英文标题】:PHP: CSV import into MYSQL is always less than the actual amount of rows in the CSV file? 【发布时间】:2016-11-17 18:18:15 【问题描述】:这是一个非常奇怪的问题,我不明白是什么原因造成的。
基本上,问题在于我的 PHP 中有一个简单的上传函数,它上传一个 CSV 文件,然后将每一行导入 MYSQL 数据库。
现在,问题是我的 CSV 文件中有大约 200+
行,但是当我使用我的 PHP 页面将其上传并导入到 MYSQL 中时,我只能绕过 158 of them imported
并且我没有收到任何错误完全没有,所以我不明白是什么原因造成的。
我有另一个 CSV 文件,其中包含大约 300+ rows
,当我上传/导入此 CSV 文件时,我将 270 rows imported
导入 MYSQL。
这就像导入函数总是短几行,我完全看不懂。
这是我的 PHP 导入代码:
error_reporting(-1);
ini_set('display_errors', 'On');
if (isset($_POST['UP']))
include "config/connect.php";
$imp= $_FILES["csv"]["name"];
move_uploaded_file($_FILES["csv"]["tmp_name"],"imports/$imp");
// path where your CSV file is located
////////////////////////////////////////////////////////
define('CSV_PATH','');
// Name of your CSV file
$csv_file = CSV_PATH . "imports/".$imp."";
$i = 0;
set_time_limit(10000);
$fp = fopen("imports/".$imp."", "r");
while( !feof($fp) )
if( !$line = fgetcsv($fp, 1000, ',', '"'))
continue;
$sql0 = "INSERT INTO `myTable`(`column1`) VALUES('".$line[0]."')";
$query0 = mysqli_query($db_conx, $sql0);
fclose($fp);
printf("<script>location.href='mypage.php'</script>");
exit();
由于安全问题/漏洞,使用直接导入 MYSQL 是不可能的。
有人可以就这个问题提出建议吗?
任何帮助将不胜感激。
【问题讨论】:
当我调试代码时,我总是使用 echo 来找出是否执行了部分代码...例如,如果我发现它在代码中的continue;
上方没有执行 mysqli_query,那么我将放置 echo "continuing";
... 只是为了查看 while 循环是否继续而不执行查询。如果它没有回显“继续”,请尝试使用mysqli_error();
能否检查文件是否已完全导入?您还可以尝试在循环中每行打印一列而不将其插入数据库吗?如果循环到达最后一行?我可能的猜测是您超出了文件的最大上传大小,因此某些部分被剪裁了??
您可能会遇到引用问题。您可以使用准备好的语句和bind_param
绕过它。否则,检查每个插入是否有错误,如果有错误则回显。
缺失的行是否有任何共同点,例如复杂的引用,还是超过 1000 个字符的限制?
@aynber, SPOT ON....我已经切换到准备好的声明,一切都像一个魅力......我可以发布我的代码并接受它作为答案,或者你可以发布你的和我会接受你的……无论哪种方式,准备好的声明都有效……谢谢
【参考方案1】:
要解决引用问题,您需要使用带有 bind_param 的准备好的语句。
程序风格:
$stmt = mysqli_prepare($db_conx, "INSERT INTO `myTable`(`column1`) VALUES(?)");
mysqli_stmt_bind_param($stmt, 's', $line[0] );
mysqli_stmt_execute($stmt);
面向对象的风格:
$stmt = $mysqli->prepare("INSERT INTO `myTable`(`column1`) VALUES(?)");
$stmt->bind_param('s', $line[0]);
$stmt->execute();
根据docs,对字符串使用s
,对整数使用i
,对双精度/小数使用d
。
【讨论】:
以上是关于将数据导入mysql中,总是提示“DROP TABLE IF EXISTS XXX(我的表名)”出错,求大神指导!!的主要内容,如果未能解决你的问题,请参考以下文章
我想从数据库里导入数据总是提示目录名无效,但是我已经创建文件夹了啊,这是为什么亲!!!
sql导入数据时总是报错,详见下图,请大神指导如何处理?文件格式改过多个版本,也没有空格或符号
PHP:CSV 导入 MYSQL 总是少于 CSV 文件中的实际行数?