2017-03-08 4 views
0

を取得していますなぜ私は私のMySQLデータベースへの簡単な挿入を行うにしようとしていますが、私はこの構文エラーを取得把握することはできません。私は、このMySQLの構文エラー(PHP PDO)(MySQLの)

Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access 
violation: 1064 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 
'Combined Authority - ICT Service Desk Technician (WYCA 53) ' at line 2 

なぜ?

問合せ:印刷

$conn->exec("INSERT INTO jobs (jobname, category, contract, link) 
SELECT * FROM (" . $name[$i] . "," . $category[$i] . "," . $contract[$i] 
. "," . $link[$i] . ") AS tmp 
WHERE NOT EXISTS (
SELECT link FROM jobs WHERE link = '" . " " . $link[$i] . ") LIMIT 1;"); 

$ sqlを:上記の貧困層の書式設定のための

INSERT INTO jobs (jobname, category, contract, link) SELECT * FROM (West 
Yorkshire Combined Authority - ICT Service Desk Technician (WYCA 53) 
Details ,' Other ',' Other 
','https://bradford.engageats.co.uk/ViewVacancyV2.aspx? 
enc=mEgrBL4XQK0+ld8aNkwYmF3VpPuSfX9mpz94c96U/BBgu1IZbwnQ0d+smFL6YrlPhdWkSGi559WmVou+xCXKsYHbHKP0EyHRCwf+vYTu8aYRJbtJgz78Wm2KQgu+LktushGT2Rg0PHjiRMA2Xyn4gw==') AS tmp WHERE NOT EXISTS (SELECT link FROM jobs WHERE link ='https://bradford.engageats.co.uk/ViewVacancyV2.aspx?enc=mEgrBL4XQK0+ld8aNkwYmF3VpPuSfX9mpz94c96U/BBgu1IZbwnQ0d+smFL6YrlPhdWkSGi559WmVou+xCXKsYHbHKP0EyHRCwf+vYTu8aYRJbtJgz78Wm2KQgu+LktushGT2Rg0PHjiRMA2Xyn4gw==') LIMIT 1; 

謝罪。テキストエディタにコピーして貼り付けてください。

EDIT:

不思議なことに、このクエリはダミーの値で動作しますが、それはまだ配列

INSERT INTO jobs (jobname, category, contract, link) 
SELECT * FROM (SELECT 'Test', 'Test2', 
'Test3','https://bradford.engageats.co.uk/ViewVacancyV2.aspx? 
enc=mEgrBL4XQK0+ld8aNkwYmEUlxXraCLcDtY5P6rS92ks+pMDnlWa9QO6M/Df/HLticzgbgVWV 
YayJj+zNDXalJnejkDY/4/gH0pIF9KyvMFXjn0u0quGSUzf4M/Gh0wF0MqIRgwLERFf+xXj6lw4s 
tQ==') AS tmp 
WHERE NOT EXISTS (
SELECT link FROM jobs WHERE link = 'https://bradford.engageats.co.uk/ViewVacancyV2.aspx?enc=mEgrBL4XQK0+ld8aNkwYmEUlxXraCLcDtY5P6rS92ks+pMDnlWa9QO6M/Df/HLticzgbgVWVYayJj+zNDXalJnejkDY/4/gH0pIF9KyvMFXjn0u0quGSUzf4M/Gh0wF0MqIRgwLERFf+xXj6lw4stQ==' 
) LIMIT 1; 
+1

シェアヨール構文でクエリ – imsome1

+0

あなたが行方不明1 ' '':

$conn->exec("SELECT link FROM jobs WHERE link = '" . " " . $link[$i] . ") LIMIT 1;"); 

...あなたはこのような何かをやっている必要があります。なぜ、どこの部分のリンク値の前にスペースを1つ追加しますか? – JustOnUnderMillions

+0

私はこれをLIKEキーワードを使って修正できるかもしれませんが、このクエリでFROMキーワードの後に​​どのように使用するのですか? – DragonMasa

答えて

0

:複数の基準を確認するために

すべての

  • まず、あなた自身のSQL構文を発明され、サーバーが面白がっていません。 SELECT * FROM (anything you want)できません。テーブル、ビュー、またはサブクエリからのみ選択できます。

  • 第2に、たとえば次のように入力します。 foo SQLでは、データベースエンジンはテーブルや列を意味するのか、それともリテラルな単語なのかを判断する方法が必要です。使用方法は単一引用符です:あなたはWhat is the difference between an identifier and a literal?

  • 最後にではなく、少なくとも、より詳細な情報を見つけることができます

    SELECT foo AS this_is_a_column, 'foo' AS this_is_a_value 
    FROM bar 
    

    、PDO拡張モジュールの全体的な使用が間違っています。 PDOはコードとデータを分離する方法を提供しますが、あなたはそれを使用していません。むしろこれより:

    $stmt = $conn->prepared("SELECT link FROM jobs WHERE link=? LIMIT 1"); 
    $stmt->execute($stmt, array($link[$i])); 
    
+0

私はクエリwiを使うとそれは期待通りに動作する配列です。 :)(私はダミーの値を使用する場合)私の疑惑は、配列要素内の構文が正しく記述されていないということです。また、チップのおかげで – DragonMasa

+0

私の編集を参照してください。私は自分の構文を発明しなかった。このようにするとうまく動作しますが、配列ではうまく動作しません。 – DragonMasa

+0

まあ、 'SELECT * FROM(西部 ヨークシャー複合機関 - ICTサービスデスク技術者...)'は確かに非標準的です:) –

1

この選択クエリを試してみて、他の変数と同じことを行うために働いていない:

SELECT * FROM ("'".$name[$i]."','".$category[$i]."', '".$contract[$i] ."', '". $link[$i] ."'") AS tmp 
+0

@ e4c5なぜ私の質問が悪いのか教えてください – DragonMasa

+0

簡単な構文エラーの質問はtopic.Andであり、ストーリーコンカットを使用していますが、特にPDOを使用している場合は – e4c5

+0

@ e4c5とお伝えください。それは不合理だ – DragonMasa