2016-11-07 15 views
0

だから私は一日中これを試してきましたし、スーパーのシンプルなソリューションがあると感じています。このクエリを使用しようとすると:ISO8601のDATETIMEを挿入するとエラーが発生します

2016-11-13T00:14:43.000Z

照会から出てくるエラー:ここ

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ':14:43.000Z)' at line 1 

データベース構造です

ここ
INSERT INTO codes (`user_id`, `type`, `code`, `expires`) VALUES ($id, $type, $code, $expires); 

があるの値が "期限が切れます":

CREATE TABLE IF NOT EXISTS codes (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
`user_id` varchar(255) NOT NULL, 
`type` varchar(255) NOT NULL, 
`code` varchar(255) NOT NULL, 
`expires` DATETIME 
)ENGINE=InnoDB; 

$ expires変数でreal_escape_stringを使用します。

誰もが何か提案がありますか?

答えて

0

2016-11-13T00:14:43.000Zのような日時の値はテキスト文字列です。 INSERT文のVALUES句には、一重引用符で囲む必要があります。

実際、すべての値はすべて文字列であるため、すべての値を一重引用符で囲む必要があります。

INSERT INTO codes (user_id, type, code, expires) VALUES ('$id', '$type', '$code', '$expires'); 

はこれを理解するために、あなたは 143-101$code値を持っているとしましょう。あなたは、PHPプログラムから

INSERT INTO junk (code) VALUES ($code) 

を行う場合は、MySQLサーバは、列の値42が得られます

INSERT INTO junk (code) VALUES (143-101) 

が表示されます。それはダグラスアダムスを幸せにしますが、他の誰も幸せにしません。

はあなたのMySQLサーバは、このアプリケーションは、グローバルなインターネットにアクセス可能な場合は、

INSERT INTO junk (code) VALUES ('$code') 

で行うことができ

INSERT INTO junk (code) VALUES ('143-101') 

、あなた必見研究アップSQL上の見たいですあなたのSQLインジェクションプルーフ、またはいくつかのサイバー犯罪者をあなたの資産を盗んであなたを盗むでしょう。

+0

「フィールドリスト」の「加入者」列が不明です。 $ type変数は "Subscriber"です。 これを試したときに私はこのエラーを受けていました。何か案は? – Nick

+0

@ニック、同じ問題。これは文字列で、 '$ type'変数を引用符で囲む必要があります。そうでなければ、データベースはデータベースオブジェクトを参照しようとしていると考えます。 –

+0

私はとても馬鹿だと感じます。説明のためにありがとうございます。<3 – Nick

関連する問題