2015-02-04 7 views
0

phpmyadmin 데이터베이스 (2 개의 메시지가 있음)에서 채팅 메시지를 가져 오려고하는데 내 쿼리에 문제가 있습니다. 여기있다 :채팅 메시지 가져 오기

$query = "SELECT * FROM chat WHERE (user_from='". $_SESSION['username'] ."' AND user_to='". $result['username'] ."') OR (user_from='". $result['username'] ."' AND user_to='". $_SESSION['username'] ."') ORDER BY id DESC"; 
$chatlog = $db->query($query); 
$message = $chatlog->fetch_array(MYSQLI_ASSOC); 

이 코드를 실행 : echo $message['message']; 는 첫 번째 메시지가 나는 또한 foreach 문을 사용하여 시도했지만, 그 중 하나가 작동하는 것 같지 않았어요, 최대 보여줍니다.

+0

ASC에만 두 번째 메사에 아이디 DESC BY 순서 변경 ge는 위로 나타냅니다 –

+0

['fetch_array'] (http://php.net/manual/en/mysqli-result.fetch-array.php)는 쿼리의 한 행 (첫 번째 행) 만 가져옵니다. 루프를 사용하여 모든 행을 배열로 반입 할 수 있습니다. 또는 ['fetch_all'] (http://php.net/manual/en/mysqli-result.fetch-all.php) [시스템이 지원하는 경우] (http : // php. net/manual/en/mysqli-result.fetch-all.php # refsect1-mysqli-result.fetch-all-mysqlnd). – showdev

+0

명확성을 위해 : "첫 번째 행"이라고 말했을 때, 나는 당신의 특정한 상황만을 언급하고있었습니다. fetch_array는 결과 포인터의 위치에 의해 식별되는 쿼리의 * next * 행을 가져옵니다. 귀하의 경우, 그것은 첫 번째 행입니다. – showdev

답변

2

fetch_array이 수행하는 메시지가 하나이기 때문에 다음 레코드를 배열로 가져옵니다. 여러 기록을 얻고 싶다면

, 당신은 행 돌이 필요하고 각 행에 대해 fetch_array 전화 할게 : SQL 주입으로부터 자신을 절약하기 위해 매개 변수화 된 쿼리 또는 prepared statements를 사용 또한

while ($message = $chatlog->fetch_array(MYSQLI_ASSOC)) { 
    $messages[] = $message; 
} 

여기 fetch_all 사용하는 경우들 많이
0

덕분에, 내 코드는 지금 일 :

$query = "SELECT * FROM chat WHERE (user_from='". $_SESSION['username'] ."' AND user_to='". $result['username'] ."') OR (user_from='". $result['username'] ."' AND user_to='". $_SESSION['username'] ."') ORDER BY id DESC"; 
$chatlog = $db->query($query); 
$message = $chatlog->fetch_all(MYSQLI_ASSOC); 
foreach ($message as $chat) { 
echo $chat['message']; 
} 
+0

좋아요! ([php.net에 따라] (http://php.net/manual/en/mysqli-result.fetch-all.php#refsect1-mysqli-result.fetch-all-mysqlnd))'fetch_all' "더 많은 메모리를 소비 할 수 있습니다", "성능에 더 영향을주는 루핑 구조"가 필요하며 "가져온 결과 세트가 처리를 위해 다른 레이어로 전송되는 상황에서만 사용해야합니다". 당신이 원하는 것을 만드십시오. – showdev