2016-09-06 4 views
-3

이 쿼리에서 잘못된 점을 볼 수 있습니까? 나는 그것을 오랫동안보고 있었고 나는 그것을 볼 수 없다.SQL - 구문 오류

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 ''' at line 1

$sql="SELECT country_name FROM countries WHERE country_id IN ("; 
    foreach($cartContentVsDatabase as $key => $val){ 
     $sql.= $key['country_id'].",";   
    } 
    ")"; 
+3

결과 쿼리를 설정 한 후 표시하십시오. – Siyual

+2

준비된 문장에 대해 알아보기 – Jens

+0

루프 뒤에서'echo $ sql;'하면 – devpro

답변

1

당신은 (그리고 아마도해야한다)를 사용할 수 있습니다 당신은

$sql= "SELECT country_name FROM countries WHERE country_id IN (".implode(",",array_column($cartContentVsDatabase,"country_id")). ")"; 

에 의해 더 쉽게 당신의 인생을 만들 수 ")";

$array_count = count($cartContentVsDatabase); 
    $temp_count = 0; 
    $sql="SELECT country_name FROM countries WHERE country_id IN ("; 
    foreach($cartContentVsDatabase as $key => $val){ 
     $temp_count++; 
     if($array_count < $temp_count) 
     { 
      $sql.= $val['country_id']; 
     } 
     else 
     { 
      $sql.= $val['country_id'].","; 
     } 

    } 
    $sql.= ")"; 
+0

이것은 OP가 자신의 코드에서 가지고있는 ± 6 문제 중 1 개를 해결합니다. 이것만으로는 문제가 해결되지 않습니다. – trincot

+0

끝에 여분의','가 있습니다 –

+0

그리고'$ key'는 배열 될 수 없습니다. –

0

$sql.= ")";에 변경이 시도 준비된 질의 예 아래의 것과 같습니다 :

$cartContentVsDatabase 실행하면 내용이 바인딩됩니다.

0

코드에 ")";을 올바르게 연결하지 마십시오. 당신은 또한 배열에 데이터를 저장하고보다 같은 쉼표로 구분 된 값 implode() 사용할 수 있습니다

예 : 아직도

<?php 

$sql = "SELECT country_name FROM countries "; 

$countries = array(); 
foreach($cartContentVsDatabase as $key => $val){ 
    $countries[] = $val['country_id']; // store country id in your array 
} 

if(count($countries) > 0){ 
    $countrylist = implode("','",$countries); // implode all country list with comma.  
    $sql .= "WHERE country_id IN ('$countrylist')"; 
}  
echo $sql; // print your query. 

?> 

모르겠어요, $key['country_id'] 올바른 하나없는, 내가이 생각을 $val['country_id']이어야합니다.

2

일부 문제 :

  • 국가가 문자열로 인용한다 당신은 당신의 국가 목록에서 뒤에 쉼표를

    • ,
    • 대신의 값 부분의 키의 값을 액세스하는 배열 요소
    • 매달린 닫는 괄호가 있는데 아무 것도 수행하지 않습니다.
    • 국가 문자열을 삽입해서는 안됩니다. 코드 삽입시 코드가 취약 해지기 때문에 준비된 문을 사용하십시오.

      // first put the countries in an array 
      foreach($cartContentVsDatabase as $key => $val){ 
          $countries[] = $val['country_id']; 
      } 
      // create a list of `?`: one for every country 
      $in = join(',', array_fill(0, count($countries), '?')); 
      
      // use that in the query 
      $sql="SELECT country_name FROM countries WHERE country_id IN ($in)"; 
      
      // Prepare the statement (this is PDO syntax) 
      $statement = $pdo->prepare($select); 
      
      // Pass the countries as parameter values, and execute 
      $statement->execute($countries); 
      

      in (...) 조항의 맥락에서 준비된 문에 대한 자세한 내용은 this Q&A를 참조하십시오 여기에

    당신이 사용할 수있는 코드입니다.

  • +0

    내 표결 준비 선언문 – devpro