将数据导入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 文件中的实际行数?

java中 总是提示找不到mysql数据库的表

怎样将Linux下MySQL数据库导入到Windows的MySQL中

mysql怎样将一个数据库中的数据导入到另一个数据库中