2017-06-14 106 views
1

我有一个PHP代码,将创建一个表使用csv文件的MySQL数据库。但是,一些列标题不被mysql读取。 mysql会读取查询的唯一时间是当我添加反引号(`)。你能帮我解决我的问题吗? :(添加反引号创建表与MySQL的CSV文件-PHP

这里是我的代码:

$file = 'C:\Users\user\Desktop\Sample CSV 
Files\672VER.csv'; 
$table = '`672ver`'; 

// get structure from csv and insert db 
ini_set('auto_detect_line_endings',TRUE); 
$handle = fopen($file,'r'); 
// first row, structure 
if (($data = fgetcsv($handle)) === FALSE) { 
echo "Cannot read from csv $file";die(); 
} 
$fields = array(); 
$field_count = 0; 
for($i=0;$i<count($data); $i++) { 
$f = strtolower(trim($data[$i])); 
if ($f) { 
// normalize the field name, strip to 20 chars if too long 
$f = substr(preg_replace ('/[^0-9a-z]/', '_', $f), 0, 100); 
$field_count++; 
$fields[] = $f.' VARCHAR(500)'; 
} 
} 

$sqlcreate = "CREATE TABLE $table (" . implode(', ', $fields) . ')'; 


echo $sqlcreate; 

回答

1

如果括在反引号字段名,这将阻止它试图解释一些列的名称为保留字...

$fields[] = '`'.$f.'` VARCHAR(500)'; 
+0

这样做:D谢谢! :)如果你不介意我问...你是什么意思列名作为保留字?你能举个例子吗? – Rukikun

+0

列名,例如'order','select','value' ......基本上任何通常是SQL语句的一部分的单词都被区别对待。 –

+0

好的。当我使用反引号时,我会尽量记住这些列名称:)感谢您的提示。 :) – Rukikun

0

我觉得你可以做

$sqlcreate = "CREATE TABLE $table (`" . implode("`, `", $fields) . "`)"; 
+0

对不起...... MySQL并没有因为逗号(,)尚未读读我的查询:C – Rukikun

+0

它说一个逗号或闭架预计 – Rukikun

+0

Thiis也会把'围绕字段类型定义。 –

1

以这种方式更改循环的最后一行:

$fields[] = '`' . $f . '` VARCHAR(500)'; 

我希望它工作正常,

+0

是的,它的工作:)谢谢。 – Rukikun