Php CSV到数据库导入脚本
导入CSV的默认phpmyadmin功能不适用于我(旋转和旋转没有错误),因此我编写了一个脚本来导入它。我没有从我的脚本中得到任何错误,但是没有一行正在导入!你能看出我可能做错了什么吗Php CSV到数据库导入脚本,php,mysql,Php,Mysql,导入CSV的默认phpmyadmin功能不适用于我(旋转和旋转没有错误),因此我编写了一个脚本来导入它。我没有从我的脚本中得到任何错误,但是没有一行正在导入!你能看出我可能做错了什么吗 <?php $db_host = 'secret'; $db_user = 'secret'; $db_pass = 'secret'; $db_database = 'secret'; /* End config */ $link = mysql
<?php
$db_host = 'secret';
$db_user = 'secret';
$db_pass = 'secret';
$db_database = 'secret';
/* End config */
$link = mysql_connect($db_host,$db_user,$db_pass) or die('Unable to establish a DB connection');
echo "Successfully connected \n";
mysql_select_db($db_database,$link);
mysql_query("SET names UTF8");
//get the csv file
// $file = $_FILES[csv][dc.csv];
$handle = fopen("dc.csv","r");
$counter = 0;
$data = array();
echo "starting import \n";
while( ($line = fgetcsv($handle)) !== false) {
$data[] = $line;
//if ($data[0]) {
mysql_query("INSERT INTO private_schools (school_name,
city,
state,
county_code,
zip_code,
NA2,
low_grade,
high_grade,
NA3,
NA4,
NA5,
grade_range,
NA6,
NA7,
NA8,
NA9,
NA10,
NA11,
NA12,
NA13,
NA14,
NA15,
NA16) VALUES
(
'".addslashes($data[$counter][0])."',
'".addslashes($data[$counter][1])."',
'".addslashes($data[$counter][2])."',
'".addslashes($data[$counter][3])."',
'".addslashes($data[$counter][4])."',
'".addslashes($data[$counter][5])."',
'".addslashes($data[$counter][6])."',
'".addslashes($data[$counter][7])."',
'".addslashes($data[$counter][8])."',
'".addslashes($data[$counter][9])."',
'".addslashes($data[$counter][10])."',
'".addslashes($data[$counter][11])."',
'".addslashes($data[$counter][12])."',
'".addslashes($data[$counter][13])."',
'".addslashes($data[$counter][14])."',
'".addslashes($data[$counter][15])."',
'".addslashes($data[$counter][16])."',
'".addslashes($data[$counter][17])."',
'".addslashes($data[$counter][18])."',
'".addslashes($data[$counter][19])."',
'".addslashes($data[$counter][20])."',
'".addslashes($data[$counter][21])."',
'".addslashes($data[$counter][22])."'
)
" or die("THere was an issue!!: " . mysql_error()));
//print($data[$counter][0]);
print "INSERT INTO private_schools (school_name,
city,
state,
county_code,
zip_code,
NA2,
low_grade,
high_grade,
NA3,
NA4,
NA5,
grade_range,
NA6,
NA7,
NA8,
NA9,
NA10,
NA11,
NA12,
NA13,
NA14,
NA15,
NA16) VALUES
(
'".addslashes($data[$counter][0])."',
'".addslashes($data[$counter][1])."',
'".addslashes($data[$counter][2])."',
'".addslashes($data[$counter][3])."',
'".addslashes($data[$counter][4])."',
'".addslashes($data[$counter][5])."',
'".addslashes($data[$counter][6])."',
'".addslashes($data[$counter][7])."',
'".addslashes($data[$counter][8])."',
'".addslashes($data[$counter][9])."',
'".addslashes($data[$counter][10])."',
'".addslashes($data[$counter][11])."',
'".addslashes($data[$counter][12])."',
'".addslashes($data[$counter][13])."',
'".addslashes($data[$counter][14])."',
'".addslashes($data[$counter][15])."',
'".addslashes($data[$counter][16])."',
'".addslashes($data[$counter][17])."',
'".addslashes($data[$counter][18])."',
'".addslashes($data[$counter][19])."',
'".addslashes($data[$counter][20])."',
'".addslashes($data[$counter][21])."',
'".addslashes($data[$counter][22])."'
)
" ;
$counter ++;
if ($counter === 3){
exit();
}
// }
}
//var_dump($data);
?>
研究如何像mysql那样使用扩展
个人主页为说
为了转义数据库参数,出于安全原因,应使用DBMS特定的转义函数(例如MySQL的mysqli_real_escape_string()或PostgreSQL的pg_escape_literal()、pg_escape_string())
对于mysql,请尝试,对于mysqli,请尝试
我不使用此格式检查/显示错误,但我认为您编写此格式的方式是:
mysql_query($yourInsertQueryString) or die("THere was an issue!!: " . mysql_error());
所有这些列类型都是字符串吗?您也可以尝试这种方法,也可以引用字段并使用“coupple”分配来验证正确的分配(csv导入中经常出现的问题)
您可以尝试使用mysqlimport。您可以从命令窗口运行
无论您是否使用windows,都可以在windows上使用它。您是否尝试过调试它?有141条线路需要检查。你肯定可以进一步缩小范围?我更新了我的答案看看这是否有帮助。确保fgetcsv正确检测行尾。有一个你为它设置的标志,修复了commitIf上的一个bug如果CSV文件在服务器上,MySQL可以(很可能)使用该语句导入它。你试过了吗?数据库范围中的列类型。。。有文本,varchar,int,floats。。。我的插入格式不正确吗?数字周围是否应该有引号?正确,不应该<代码>字符串类型列='值',数字类型列=123
Ahhh这很有意义。稍后我会告诉你最新情况。我还得做一些其他的事情。@CaitlinHavener,你试着修改了mysql\u query()或die()
语句?还是没有错误?嗯。。。没有意识到将查询本身放在那里会导致问题。完全按照你说的去做,最后得到了一些提示。。在用这些提示调试了一段时间后,我终于做到了!非常感谢。很奇怪,这是一个有效的例子!好吧,你找到了一个解决方案,但更贴切的说法是:“不工作,它给我这个错误:布拉布拉布拉”
mysql_query($yourInsertQueryString) or die("THere was an issue!!: " . mysql_error());
<?php
$db_host = 'secret';
$db_user = 'secret';
$db_pass = 'secret';
$db_database = 'secret';
$_db = mysql_connect($db_host,$db_user,$db_pass);
mysql_select_db($db_database,$_db);
$fileds = array(
"school_name",
"city",
"state",
"county_code",
"zip_code",
"NA2",
"low_grade",
"high_grade",
"NA3",
"NA4",
"NA5",
"grade_range",
"NA6",
"NA7",
"NA8",
"NA9",
"NA10",
"NA11",
"NA12",
"NA13",
"NA14",
"NA15",
"NA16",
);
$handle = fopen("dc.csv","r");
$counter = 0;
$data = array();
echo "starting import \n";
while( ($line = fgetcsv($handle)) !== false) {
$data[] = $line;
}
foreach($data as $row){
if(count($fileds) != count($row)){
continue;
}
$couples = array();
foreach($fileds as $k => $v){
$couples[] = sprintf("`%s` = '%s",$v ,mysql_real_escape_string($row[$k],$_db));
}
$_sql = 'INSERT INTO private_schools '.join(',', $couples).';';
echo "$_sql\n";
mysql_query($_sql);
}
// and remeber to commit if you use a transactiona storage engine
mysql_query('commit',$_db); // fixed for "old" client