2017-10-26 7 views
-1

私はこれを使用して私のデータベースにいくつかのテーブルを作ろうとしています。テーブルの作成中にエラーが発生しました:SQL構文にエラーがあります。

が、私はこのエラーを取得する:テーブルを作成

エラー:あなたはあなたのSQL構文でエラーが発生しています。 'UNSIGNED AUTO_INCREMENT IP VARCHAR(65)NOT NULL、INT(11)をしようと' そば使用する権利構文については、ご使用のMariaDBサーバーのバージョンに対応するマニュアルを確認し、この上にライン2

で:

$dbprefix = 'duh_'; 
$prefixloginAttempts = $dbprefix . 'loginAttempts'; 

$table = array(); 

$table[] = "CREATE TABLE IF NOT EXISTS $prefixloginAttempts (
    id    INT(11)  NOT NULL UNSIGNED AUTO_INCREMENT, 
    ip    VARCHAR(65) NOT NULL, 
    attempts  INT(11)  NOT NULL, 
    lastLogin  DATETIME NOT NULL, 
    username  VARCHAR(65) NOT NULL, 
    mod_timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 

    PRIMARY KEY      ('id'), 
    UNIQUE KEY 'id_UNIQUE'   ('id') 
) ENGINE=InnoDB DEFAULT CHARSET=utf8;"; 

foreach ($table as $sql) { 
    $query = $conn->query($sql); 
} 

失敗がどこにあるかを知る人はいますか?私は.. ..

答えて

1

MySQLが提供するエラーメッセージには、解析が停止したクエリの部分が含まれています。通常、エラーは、メッセージに記載されたクエリの部分の最初の単語またはその直前のいずれかにあります。

このクエリでは、問題はUNSIGNEDというキーワードにあります。それはdata typeの一部であり、それはINT(11)と直後に滞在する必要があります。

id    INT(11)  UNSIGNED NOT NULL AUTO_INCREMENT, 

読むCREATE TABLE statementの構文について。

インデックスの定義にもエラーがあります。列名はアポストロフィで囲まれているため、オブジェクト名ではなく文字列になります。

オブジェクト名は、彼らはまた、SQL keywords or MySQL reserved wordsあるならば、彼らはバッククォート(`)で囲む必要があり、引用符で囲まれていない左またはすることができます。

PRIMARY KEY      (id), 
UNIQUE KEY id_UNIQUE   (id) 

または

PRIMARY KEY      (`id`), 
UNIQUE KEY `id_UNIQUE`   (`id`) 

読むwhen to use single quotes, double quotes or backticks in MySQLが。

+0

ありがとうございます!あなたは私を多くの苦痛から救った! :) –

関連する問題