2014-07-15 3 views
1

저는 JSON 파일에서 가져온 키를 사용하여 mysql 데이터베이스에서 값을 조회하려고합니다. 여기서 볼 수 있듯이,MySQLi 쿼리가 빈을 반환합니다.

SELECT `city` FROM `city_table` WHERE (CONVERT(`code` USING utf8) LIKE 'נגב 297') 

phpMyAdmin에 결과를 반환 : PHP 코드 그러나 비어 반환 http://paulglushak.com/json/mysql_result.html

예를 들어, 쿼리의

<?php 

$db = mysqli_connect('localhost', 'root', '', 'colorred'); 
if (mysqli_connect_errno()) { 
    die(mysqli_connect_error()); 
} 

$data = file_get_contents('http://paulglushak.com/json/test.json'); 
$parse = json_decode($data,true); 
$time = date('l, d-M-Y H:i:s T', $parse['id']/1000); 
$title = $parse['title']; 

echo '<br><br>',$time,'<br>'; 
echo $title,'<br>'; 
if(!($parse['data']==null)) { 
    foreach ($parse['data'] as $code) { 
     $query = "SELECT `city` FROM `city_table` WHERE (CONVERT(`code` USING utf8) LIKE '".$code."')"; 
     echo 'The Query: ' .$query.'<br>'; 
     $result = mysqli_query($db, $query) or die('Error: '.mysqli_error($db)); 
     echo '<hr>'; 
     while($row = mysqli_fetch_assoc($result)) { 
      echo $row; 
      } 
     } 
    mysqli_close($db); 
} 


?> 

하나는 : 현재이 코드입니다 . 내가 잘못하고있는 것이 있습니까? 나는 확신한다.

$query = "SELECT `city` FROM `city_table` WHERE (CONVERT(`code` USING utf8) LIKE '%".$code."%')"; 

을하지만 루프에서 SQL 쿼리를 만드는 조언을하지 않을 :

+1

유니 코드 문자가 있습니다. 캐릭터가 그 과정에서 트랜스 코드 할 수없는 경우가 있습니다. 쿼리의 에코 결과가 정상입니까 (예상 한 것과 동일합니까)? – Raptor

+0

mysqli를 prepared statement없이 사용하는 이유는 무엇입니까? .. http://php.net/manual/en/mysqli.prepare.php 당신의 코드는 MySQL 인젝션에 취약합니다. –

+0

@VladimirHraban 틀린 개념. 준비된 문을 사용하지 않으면 SQL 인젝션 (MySQL 인젝션이 아님)에 취약하지 않습니다. 제대로 입력 데이터를 피할 수 주입 공격을 피할 수 있습니다. 자세한 정보는 준비된 명령문 문서를 읽으십시오. – Raptor

답변

0

결국 인코딩 문제 였으므로, 랩터가 나에게 방향을 제시해 주셔서 감사합니다.

임시적인 mysql 항목을 영어로 추가하여 디버깅을 시도한 다음 직접 쿼리하여 원하는 값을 반환했습니다. 이것은 히브리서가이 문제를 일으키는 편지 였음을 의미합니다. 연결 후

mysqli_set_charset($db, "utf8"); 

을 추가하여 문제를 해결했습니다.

0

당신은 아마 당신 같은 문에서 와일드 카드가 있어야합니다. 루프에서 하나의 쿼리를 작성하여 한 번 실행하는 것이 좋습니다.

+0

OP는 동일한 쿼리가 phpMyAdmin (PMA)에서 작동 함을 언급했습니다. 와일드 카드와 관련이 없습니다. – Raptor

관련 문제