2017-03-08 4 views
0

내 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

공유을 yor 구문에서 쿼리 – imsome1

+0

당신은 하나의 누락''. 그리고 왜 where 부분에 링크 값 앞에 하나의 공백을 추가합니까? – JustOnUnderMillions

+0

필자는 LIKE 키워드를 사용하여이 문제를 해결할 수 있다고 생각하지만이 쿼리에서 FROM 키워드 다음에 어떻게 사용합니까? – DragonMasa

답변

0

나는 세 가지 문제를 발견 할 수 있습니다 모든

  • 먼저, 당신이 당신의 자신의 SQL 구문과 서버를 발명하는 것은 즐겁게하지 않습니다. SELECT * FROM (anything you want) 수 없습니다. 테이블, 뷰 또는 하위 쿼리에서만 선택할 수 있습니다.

  • 둘째, 예 : 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는 코드와 데이터를 분리하는 방법을 제공하지만 사용하지는 않습니다. 오히려 이보다 :

    $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

쿼리를 사용할 때 wi thout 예상대로 작동하는 배열. :) (만약 내가 더미 값을 사용하여) 내 의혹은 배열 요소 내 구문이 올바르게 작성되지 않은 것입니다. 또한, 팁 (덕택으로) – DragonMasa

+0

나의 편집을 보라. 나는 내 자신의 구문을 발명하지 않았다. 이런 식으로하면 잘 작동하지만 배열에서는 그렇지 않습니다. – DragonMasa

+0

음,'SELECT * FROM (West Yorkshire Combined Authority - ICT Service Desk Technician ...)'이 명확히 비표준입니다 :) –

1

이 선택 쿼리를 시도하고 다른 변수와 동일한 기능을 수행 할 배열에 대해 작동하지 않습니다 :

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

@ e4c5 내 질문에 왜 나쁜지 말해봐 – DragonMasa

+0

간단한 문법 오류 질문은 주제를 벗어났다. 그리고 당신은 불합리한 문자열 연결을 사용하고있다. 특별히 PDO를 사용할 때 – e4c5

+0

@ e4c5 왜 그것이 터무니 없는지 말해줘. 그것은 어리 석다 – DragonMasa

관련 문제