2012-09-10 88 views
0

我在下面的代碼中查詢沒有問題。但第二個代碼是拋出錯誤創建新表時MySQL語法錯誤

您的SQL語法有錯誤;檢查對應於你的MySQL服務器版本使用附近的「」在1號線

工作代碼正確的語法手冊:

<?php 
mysql_connect("localhost", "","") or die(mysql_error()); 
mysql_select_db("") or die(mysql_error()); 

$result =" CREATE TABLE google_csv(
    ÿþName varchar(80), 
    Given_Name varchar(80), 
    Additional_Name varchar(80), 
    Family_Name varchar(80), 
    Yomi_Name varchar(80), 
    Given_Name_Yomi varchar(80), 
    Additional_Name_Yomi varchar(80), 
    Family_Name_Yomi varchar(80), 
    Name_Prefix varchar(80), 
    Name_Suffix varchar(80), 
    Initials varchar(80), 
    Nickname varchar(80), 
    Short_Name varchar(80), 
    Maiden_Name varchar(80), 
    Birthday varchar(80), 
    Gender varchar(80), 
    Location varchar(80), 
    Billing_Information varchar(80), 
    Directory_Server varchar(80), 
    Mileage varchar(80), 
    Occupation varchar(80), 
    Hobby varchar(80), 
    Sensitivity varchar(80), 
    Priority varchar(80), 
    Subject varchar(80), 
    Notes varchar(80), 
    Group_Membership varchar(80), 
    E_mail_1___Type int(11), 
    E_mail_1___Value int(11), 
    E_mail_2___Type int(11), 
    E_mail_2___Value int(11), 
    Phone_1___Type int(11), 
    Phone_1___Value int(11), 
    Phone_2___Type int(11), 
    Phone_2___Value int(11), 
    Phone_3___Type int(11), 
    Phone_3___Value int(11), 
    Address_1___Type int(11), 
    Address_1___Formatted int(11), 
    Address_1___Street int(11), 
    Address_1___City int(11), 
    Address_1___PO_Box int(11), 
    Address_1___Region int(11), 
    Address_1___Postal_Code int(11), 
    Address_1___Country int(11), 
    Address_1___Extended_Address int(11), 
    Website_1___Type int(11), 
    Website_1___Value int(11) 
)"; 

echo $result; 

mysql_query($result); 
echo mysql_error(); 
?> 

錯誤產生的代碼;

<?php 

// GENERATE TABLE FROM FIRST LINE OF CSV FILE 

$inputFile = 'google.csv'; 
$tableName = 'google_csv'; 

$fh = fopen($inputFile, 'r'); 
$contents = fread($fh, 5120); // 5KB 
fclose($fh); 

$fileLines = explode("\n", $contents); 

$fieldList = explode(',', $fileLines[0]); 

$lastField=count($fieldList)-1; 

echo "Total Fields :".count($fieldList)."<br>"; 

echo "Last Field :".$lastField."<br>"; 

$result ="CREATE TABLE $tableName("; 

for($i = 0; $i < count($fieldList); $i++) 
{ 
    if(preg_match('/[1-9]/', $fieldList[$i])) 
    { 

    if ($i==$lastField) 
    {$result .=str_replace(array(" ",'-'),"_",$fieldList[$i]). ' int(11)';} 
    else 
    {$result .=str_replace(array(" ",'-'),"_",$fieldList[$i]). ' int(11),';} 

    } 
    else 
    { 

    if($i==$lastField) 

    {$result .=str_replace(array(" ",'-'),"_",$fieldList[$i]). ' varchar(80)';} 
    else 
    {$result .=str_replace(array(" ",'-'),"_",$fieldList[$i]). ' varchar(80),';} 

    } 
} 

$result .=")"; 

if ($result) {echo $result."<br>".$i."<br>";} else {Echo "Some Problem!";} 

mysql_connect("localhost", "","") or die(mysql_error()); 
mysql_select_db("") or die(mysql_error()); 

mysql_query($result); 

echo mysql_error(); 

?> 

我在第一個代碼中使用了從這裏輸出的$result,它工作得很好!我在第二個代碼中錯了什麼地方?

的$結果回波給出

CREATE TABLE google_csv(ÿþNameVARCHAR(80),GIVEN_NAME VARCHAR(80),Additional_Name VARCHAR(80),FAMILY_NAME VARCHAR(80),Yomi_Name VARCHAR(80),Given_Name_Yomi varchar(80),Additional_Name_Yomi varchar(80),Family_Name_Yomi varchar(80),Name_Prefix varchar(80),Name_Suffix varchar(80),Initials varchar(80),Nickname varchar(80),Short_Name varchar(80),Maiden_Name varchar 80),生成varchar(80),性別varchar(80),位置varchar(80),Billing_Information varchar(80),Directory_Server varchar(80),Mileage varchar(80),佔據varchar(80),Hobby varchar(80) ,Sensitivity varchar(80),Priority varchar(80),Subject varchar(80),Notes varchar(80),Group_Membership varchar(80),E_mail_1_ 類型爲INT(11),E_mail_1 _Value INT(11),E_mail_2_ int類型(11),E_mail_2 _Value INT(11),Phone_1_ int類型(11),PHONE_1 _Value INT(11),Phone_2_ 類型INT(11),Phone_2 _Value INT(11),Phone_3_ int類型(11),Phone_3 _Value INT(11),Address_1_ int類型(11),ADDRESS_1 _Formatted INT(11),Address_1_ 街INT( 11),Address_1 _City int(11),Address_1_ PO_Box int(11),Address_1 _Region int(11),Address_1_ Postal_Code int(11),Address_1 _Country int(11),Address_1_ 個Extended_Address INT(11),WEBSITE_1 _Type INT(11),WEBSITE_1 ___值INT(11))

看起來一切都很好在這裏!但後來......

+5

請封閉,不使用'mysql_ *'功能的新代碼。他們不再被維護,社區已經開始[棄用流程](http://news.php.net/php.internals/53799)。看到[**紅框**](http://php.net/mysql-connect)?相反,您應該瞭解[準備好的陳述](http://en.wikipedia.org/wiki/Prepared_statement)並使用[PDO](http://php.net/pdo)或[MySQLi](http:// php.net/mysqli)。如果你不能決定,試試[這篇文章](http://php.net/mysqlinfo.api.choosing)。如果你關心學習,[這裏是很好的PDO教程](http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers)。 –

+1

在發送到查詢之前,你能'echo $ result'嗎?如果代碼的第一部分工作正常,那麼在PHP代碼期間更有可能有人去瘋狂,並且創建表查詢不是您認爲的那樣。 – Fluffeh

+0

$ result echo CREATE TABLE google_csv(ÿþNamevarchar(80),Given_Name varchar(80),Additional_Name varchar(80),Family_Name ...... – user1407430

回答

0

這是什麼:

雲天化

$result ="CREATE TABLE google_csv(ÿþName ....") 

      -----------------------^ 

雲天化是特殊charecters(0xFE的,爲0xFF)。我不認爲OP希望他們在科拉姆名,如果是的話,應該由

`ÿþName` 

http://en.wikipedia.org/wiki/ISO_8859-1

+0

我注意到,當我編輯格式化的問題,但OP說它是工作代碼? – Fluffeh

+0

$ result回聲CREATE TABLE google_csv(ÿþNamevarchar(80),Given_Name varchar(80),Additional_Name varchar(80),Family_Name ... – user1407430

+0

我也想知道什麼意思!!!以及它如何到達!!! – user1407430