2

PHP で MySQL ステートメントを動的に形成していますが、これが実行に失敗する理由がわかりません。

    INSERT INTO users ( `email`, `password`, `first_name`, `last_name`, `url`,
   `description`, `media`, `tags`, `zip`, `country`, `lat`, `lon`, `city`, `state`, 
   `datetime_joined`, `API_key`, `verified`, `likes`, `email_confirmation_code`,
   `email_confirmed`) VALUES ( 'brannon@brannondorsey.com', 
   'f1e5aeb519396a87bd2a90e6a680d18713b1ecbe', 'Brannon', 'Dorsey',
   'brannondorsey.com', 'description', 'sculpture, photography, creative code',
   'saic, chicago, richmond, young arts', '60601', 'us', '41.8858', '-87.6181',
   'Chicago', 'Illinois', '2013-06-26T23:50:29+0200',
   '7e852a3e97257b563ffbb879d764ce56110ccb70', '0', 
   '0','c35bad0dc9b058addbf47eef8dda2b124528751e', '0')

挿入しようとしている列のスペルと形式、およびテーブル名を確認しましたが、すべて正しいです。何が起きているのか誰か知っていますか?私は他の人のために忙しい仕事をしようとしているわけではありません。ここで何が起こっているのか理解できません。

ありがとう!

アップデート:

テーブルを作成したステートメントは次のとおりです。

    CREATE TABLE users (
    id mediumint(8) unsigned NOT NULL auto_increment,
    email varchar(255) default NULL,
    password varchar(255),
    url TEXT default NULL,
    description TEXT default NULL,
    city varchar(255),
    state TEXT default NULL,
    country varchar(100) default NULL,
    zip varchar(10) default NULL,
    datetime_joined varchar(255),
    media varchar(255) default NULL,
    tags varchar(255) default NULL,
    API_key varchar(255),
    verified mediumint default NULL,
    first_name varchar(255) default NULL,
    last_name varchar(255) default NULL,
    API_hits mediumint default NULL,
    API_hit_date varchar(255),
    likes mediumint default NULL,
    lat varchar(30) default NULL,
    lon varchar(30) default NULL,
    email_confirmation_code varchar(255),
    email_confirmed mediumint default NULL,
    PRIMARY KEY (id),
    FULLTEXT(`first_name`, `last_name`, `email`, `url`, `description`, `media`, `tags`, `city`, `state`, `country`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;

すべての数字から一重引用符を削除しようとしましたが、うまくいきませんでした。また、最も奇妙なことに、失敗したクエリをブラウザーにエコーし、それをコピーして PhpMyAdmin の sql 入力ボックスに貼り付けると、行が挿入されます... 何かアイデアはありますか?

アップデート:

self::$mysqli->error言うYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\'brannon@brannondorsey.com\', \'f1e5aeb519396a87bd2a90e6a680d18713b1ecbe\', \'B' at line 1

更新:以下の回答を参照してください... 2 日間、自分の質問に答えることができません。みんな、ありがとう。

4

3 に答える 3

3

クエリを動的に作成するために行っていたすべての文字列操作を調べたところ、クエリにreal_escape_string入力される値だけでなく、クエリの一部に使用していたことがわかりました。これは、ブラウザーからコピーしたときにクエリが機能した理由を説明しています。

于 2013-06-26T23:20:23.590 に答える