복붙노트

[SQL] SQLSTATE [42000] : 구문 오류 또는 액세스 위반 : 당신은 당신의 SQL 구문에 오류가 1064 - PHP - PDO [중복]

SQL

SQLSTATE [42000] : 구문 오류 또는 액세스 위반 : 당신은 당신의 SQL 구문에 오류가 1064 - PHP - PDO [중복]

나는 모든 통해 다른 StackOverflow의를 보았다 (구글) 같은 문제로 게시물을하지만 아무도 내 문제를 해결하기 위해 같았다했습니다.

나는 PDO와 PHP를 사용하고 있습니다.

내 코드 :

$vals = array(
   ':from'    => $email,
   ':to'      => $recipient,
   ':name'    => $name,
   ':subject' => $subject,
   ':message' = >$message
);
print_r($vals);
try {
   $pdo = new PDOConfig();
   $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
   $sql = "SELECT * FROM messages WHERE `message` LIKE :message";
   $q = $pdo->prepare($sql);
   $q->execute(array(':message' => $vals[':message']));
   $resp = $q->fetchAll();

   foreach ($resp as $row) {
      throw new Exception('Please do not post the same message twice!');
   }

   $sql = "INSERT INTO messages (from, to, name, subject, message) VALUES (:from, :to, :name, :subject, :message)";
   $q = $pdo->prepare($sql);
   $q->execute($vals);
} 
catch(PDOException $e) {
   echo $e->getMessage();
}

상기 제 인 print_r 준다

Array ( [:from]    => abc@gmail.com 
        [:to]      => lala@me.com 
        [:name]    => abc 
        [:subject] => abc 
        [:message] => abc )

(아무도 널 없음) 예상되는

하지만, 오류를 출력한다

어떤 아이디어는이 문제를 해결하지하는 방법. 어떤 아이디어?

해결법

  1. ==============================

    1.에서는 SQL의 키워드입니다. 당신은 그것을 인용하지 않고 열 이름으로 그것을 사용하지 않을 수 있습니다. MySQL의에서 열 이름 같은 것들, 즉`from` 역 따옴표를 사용하여 인용하고 있습니다.

    에서는 SQL의 키워드입니다. 당신은 그것을 인용하지 않고 열 이름으로 그것을 사용하지 않을 수 있습니다. MySQL의에서 열 이름 같은 것들, 즉`from` 역 따옴표를 사용하여 인용하고 있습니다.

    개인적으로, 나는 귀찮게하지 것이다; 난 그냥 열 이름을 바꿀 것입니다.

    추신. 의견에서 지적했듯이 다른 SQL 키워드가에, 너무, 인용 할 필요가 있도록. 편리하게, drupal.org에서의 사람들은 SQL에서 예약 된 단어의 목록을 유지한다.

  2. ==============================

    2.나는이 정확한 오류를 가지고 있지만, 내 경우에는 내가 유형을 지정하지 않고 LIMIT 절에 대한 값을 결합했다. 난 그냥 경우 누군가 여기에이를 포기하고있어 같은 이유로이 오류를 가져옵니다. 유형 LIMIT 지정하지 않고 : 제한 OFFSET : 오프셋 (offset) '1'오프셋 '10'LIMIT 결과; 대신 한도 10 옵셋 1 ;. 무슨 일이 그 다음이다 해결하는 데 도움이 :

    나는이 정확한 오류를 가지고 있지만, 내 경우에는 내가 유형을 지정하지 않고 LIMIT 절에 대한 값을 결합했다. 난 그냥 경우 누군가 여기에이를 포기하고있어 같은 이유로이 오류를 가져옵니다. 유형 LIMIT 지정하지 않고 : 제한 OFFSET : 오프셋 (offset) '1'오프셋 '10'LIMIT 결과; 대신 한도 10 옵셋 1 ;. 무슨 일이 그 다음이다 해결하는 데 도움이 :

    $stmt->bindParam(':limit', intval($limit, 10), \PDO::PARAM_INT);
    $stmt->bindParam(':offset', intval($offset, 10), \PDO::PARAM_INT);
    
  3. ==============================

    3.SQL 쿼리에서 동일한 PDO 오류 다차원 배열의 데이터베이스 값에 삽입하는 동안 :

    SQL 쿼리에서 동일한 PDO 오류 다차원 배열의 데이터베이스 값에 삽입하는 동안 :

    $sql = "UPDATE test SET field=arr[$s][a] WHERE id = $id";
    $sth = $db->prepare($sql);    
    $sth->execute();
    

    어레이 도착 [$ S [A] SQL 쿼리에서 문제가 해결 함유 대신하여 변수를 추출하는 단계를 포함한다.

  4. ==============================

    4.

    ALTER TABLE `{$installer->getTable('sales/quote_payment')}`
    ADD `custom_field_one` VARCHAR( 255 ) NOT NULL,
        ADD `custom_field_two` VARCHAR( 255 ) NOT NULL;
    

    역 따옴표 즉 "`"제대로 추가합니다. 역 따옴표 사이에 getTable이 이름과 열 이름을 작성합니다.

  5. from https://stackoverflow.com/questions/4544051/sqlstate42000-syntax-error-or-access-violation-1064-you-have-an-error-in-you by cc-by-sa and MIT license