2017-03-08 14 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; 

道歉上述差格式。請複製並粘貼到文本編輯器中,以便更好地查看它。

編輯:

奇怪的是,這個查詢的工作與虛值,但它仍然不是陣列工作

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

你缺少一個'''在侑語法。爲什麼在where部分的鏈接值之前添加一個空格? – JustOnUnderMillions

+0

我想我可以使用LIKE關鍵字來解決這個問題,但是如何在查詢中的FROM關鍵字之後使用它? – DragonMasa

回答

0

我可以發現三個不同的問題:

所有的
  • 首先,你是你自己發明的SQL語法和服務器是不開心。你不能SELECT * FROM (anything you want)。您只能從表,視圖或子查詢中進行選擇。

  • 其次,當你輸入例如foo在SQL中,數據庫引擎需要一種方法來確定您的意思是表或列還是意思是字面意思。使用的方法是單引號

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

    您可以在What is the difference between an identifier and a literal?

  • 最後但並非最不重要找到更多的細節,你的整體採用了PDO擴展是錯誤的。 PDO提供了一種分離代碼和數據的方法,但您並未使用它。而不是這樣的:

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

    ...你應該做這樣的事情:

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

當我使用查詢無線在陣列它按預期工作。 :)(如果我用虛擬值使用它)我懷疑數組元素中的語法不正確。另外,感謝您的提示 – DragonMasa

+0

請參閱我的編輯。我沒有發明自己的語法。當我這樣做時,它工作得很好,但不適用於數組。 – DragonMasa

+0

那麼,'SELECT * FROM(West 約克郡聯合機構 - ICT服務檯技術員......)'絕對不是標準:) –

1

試試這個選擇查詢,並與其他變量做相同的:

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

@ e4c5告訴我爲什麼我的問題是不好的 – DragonMasa

+0

簡單的語法錯誤問題是關閉的topic.And你使用字符串concat這是荒謬的,特別是當你使用PDO – e4c5

+0

@ e4c5告訴我爲什麼它是荒謬的你不提供如果你只是說這是荒謬的 – DragonMasa

相關問題