2014-09-09 2 views
-1

첫 번째 쿼리는 괜찮지 만 두 번째 쿼리는 정상적으로 작동하지 않습니다. 나는 두 번째로 $city 변수를 연결하고 그것을 반향과 올바른 값을 표시하지만 그것 실제가 :두 번째 mysqli_query 실패

$row = mysqli_query($dbc, $query) 
    or die('Error while querying the Database'); 

실패 ... 도와주세요!

 $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) 
      or WriteMessage('Error', 'Could not connect to the Database...'); 

    //get user city... 

    $userID = $_SESSION['userID']; 
    $queryUserCity = "SELECT * from user where userID = $userID"; 
    $GetResult = mysqli_query($dbc, $queryUserCity) 
    or die('Error while querying the Database'); 

    $getRow = mysqli_fetch_array($GetResult); 
    $city = $getRow['city']; 
    $state = $getRow['state']; 
    $username = $getRow['username']; 

    echo 'username='.$username.' '; 
    echo 'city='.$city; 
    echo 'state = ' .$state; 



     $query = "SELECT * FROM adds where city = $city ORDER BY addDate ASC";   
     //fails right here... 

/*-->*/  $row = mysqli_query($dbc, $query) 
       or die('Error while querying the Database'); 

     echo $query; 
     exit(); 
     while($row = mysqli_fetch_array($data)) 
     { 
+0

'city = 'city ='city = 'city ='$ city'' 변수가 정수가 아닌 경우 문자열 캡슐화는 필수 항목입니다. – Ohgodwhy

+0

먼저 데이터베이스에서 SQL 문을 사용해보십시오. 일부 데이터베이스는 이러한 쿼리를 만드는데도 도움이됩니다. 그럼 당신은 효과가있는 문장을 사용하고, 당신은 괜찮습니다. –

+0

여러 쿼리를 사용하는 것이 안전해야 항상 트랜잭션을 사용하십시오 – user3209031

답변

1

작은 따옴표없이 문자열을 찾으려고합니다. single quote없이 integer을 사용하지만 문자열의 경우 string과 함께 single quote을 사용해야합니다.

변화

$query = "SELECT * FROM adds where city = $city ORDER BY addDate ASC"; 

$query = "SELECT * FROM adds where city = '$city' ORDER BY addDate ASC"; 

및 정확한 오류가 아래의 코드를 사용하려고 밖으로 찾을 수 있습니다. 사실, 당신이 정말로 어쨌든 그런 식으로 일을해서는 안

... where city = '$city' ... 

을하지만 :

if (!mysqli_query($dbc, $query)){ 
    echo("Error description: " . mysqli_error($dbc)); 
} 
+0

감사합니다 램,하지만 실제로 그것을 되풀이했다 .. 그리고 그것은 쿼리를 잘 작동합니다 ... 또한 우리가 $ userID 변수를 첫 번째 쿼리를 살펴 보면 sinle 따옴표없이 '.. –

+0

작은 따옴표없이 정수를 비교/찾을 수 있지만 문자열의 경우 작은 따옴표를 사용해야합니다. –

+0

나는 당신이 말하는 것을 완전히 이해하지만 반드시 필요하지는 않다. ... –

1

도시가 텍스트 유형 (그리고 아마도) 인 경우 , 다음이 필요합니다 누군가가 자신의 도시에 임의의 텍스트를 입력 할 수있는 경우 SQL 주입 공격의 가능성을 열어주기 때문입니다.

이러한 공격으로부터 사용자를 보호 할 수 있으므로 매개 변수가있는 쿼리를 조사해야합니다. Exploits of a Mom 및 매우 귀중한 explain-xkcd 항목을 참조하십시오.

+0

아플 시도해 ... –

+0

고쳐 주셔서 감사합니다! –

관련 문제