2017-09-17 2 views
-1

내 프로그램에서 if! isset 문을 사용할 때 변수가 설정되었음을 인식하지 못합니다. 변수 $ q가 설정되지 않았다면 mysqli 데이터베이스에서 쿼리를 얻도록 설정했다. 이 쿼리는 데이터베이스에서 최신 데이터 항목을 다시 가져옵니다. 이 데이터는 $ row라는 변수와 같습니다. $ row 변수는 나중에 웹 페이지에 표시되는 레코드를 검색하기 위해 호출됩니다. 문제는 .php 파일이 마지막으로 실행 된 때부터 $ q가 설정 되었더라도 if 문이 다시 실행된다는 것입니다 (페이지를 새로 고치거나 다시로드 할 때). 코드는 다음과 같습니다.Isset이 mysqli_query와 동작하지 않습니다

$db_user = "root"; 
$db_pass = ""; 
$db_name = "music_reviews_database"; 
$db_host = "localhost"; 

$conn = mysqli_connect($db_host, $db_user, $db_pass, $db_name); 
if (!isset($q)) { 
    $q = mysqli_query($conn, 
      "SELECT album.Album, 
      artist.ArtistsName, 
      datereviewed.DateReviewed, 
      features.Features, 
      genre.Genre, 
      rating.Rating, 
      songname.SongName, 
      link.link, 
      songname.ID, 
      comments.Comments 
      FROM songname 
      INNER JOIN album ON album.ID = songname.ID 
      INNER JOIN artist ON artist.ID = songname.ID 
      INNER JOIN datereviewed ON datereviewed.ID = songname.ID 
      INNER JOIN features ON features.ID = songname.ID 
      INNER JOIN genre ON genre.ID = songname.ID 
      INNER JOIN rating ON rating.ID = songname.ID 
      INNER JOIN link ON link.ID = songname.ID 
      INNER JOIN comments ON comments.ID = songname.ID 
      ORDER BY DateReviewed DESC LIMIT 1"); 
    $row = mysqli_fetch_array($q); 
} 

코드가 이렇게되어야합니다.

$q = mysqli_query($conn, 
     "SELECT album.Album, 
     artist.ArtistsName, 
     datereviewed.DateReviewed, 
     features.Features, 
     genre.Genre, 
     rating.Rating, 
     songname.SongName, 
     link.link, 
     songname.ID, 
     comments.Comments 
     FROM songname 
     INNER JOIN album ON album.ID = songname.ID 
     INNER JOIN artist ON artist.ID = songname.ID 
     INNER JOIN datereviewed ON datereviewed.ID = songname.ID 
     INNER JOIN features ON features.ID = songname.ID 
     INNER JOIN genre ON genre.ID = songname.ID 
     INNER JOIN rating ON rating.ID = songname.ID 
     INNER JOIN link ON link.ID = songname.ID 
     INNER JOIN comments ON comments.ID = songname.ID 
     ORDER BY DateReviewed DESC LIMIT 1"); 
$row = mysqli_fetch_array($q); 
file_put_contents(data.php, return var_export($row,true)); 
if (file_exists(data.php)) { 
    $row = include(data.php); 
} 
+0

$ q를 어디에서 초기화합니까? – Michael

+0

당신은 언급하지 않는 이유는 $ 변수를 그 이유는 그 인식하지 – Abhishek

+0

오, 그래 처음으로 isset를 사용하려고했던 이유는 단지 한 번 쿼리를 초기화하는 방법이있을 것입니다. 만약 새로운 데이터가 데이터베이스에 삽입되면 쿼리는 내가 원하는 데이터를 최신 데이터로 덮어 쓸 것입니다. –

답변

0

당신은

if (!isset($q)) { 

및 닫기 괄호를 제거 할 수 있습니다. 그들은 불필요합니다.

결과를 얻기 위해 매번 쿼리를 실행하지 않으려면 결과 캐싱을 시도하십시오.

예. 당신이 쿼리의 결과를 얻을 후

, 그럼 당신은 다시 그것을 밖으로 읽을 수있는 곳

file_put_contents($path, '<?php return '.var_export($mysql_row,true).';?>'); 

파일 시스템 ($ 경로)에 파일로 내용을 보내

if (file_exists($path)) $mysql_row = include($path); 

그래서 뭔가를 같은 :

if (file_exists(data.php)) { 
    $row = include(data.php); 
}else{ 
     $q = mysqli_query($conn, 
     "SELECT album.Album, 
     artist.ArtistsName, 
     datereviewed.DateReviewed, 
     features.Features, 
     genre.Genre, 
     rating.Rating, 
     songname.SongName, 
     link.link, 
     songname.ID, 
     comments.Comments 
     FROM songname 
     INNER JOIN album ON album.ID = songname.ID 
     INNER JOIN artist ON artist.ID = songname.ID 
     INNER JOIN datereviewed ON datereviewed.ID = songname.ID 
     INNER JOIN features ON features.ID = songname.ID 
     INNER JOIN genre ON genre.ID = songname.ID 
     INNER JOIN rating ON rating.ID = songname.ID 
     INNER JOIN link ON link.ID = songname.ID 
     INNER JOIN comments ON comments.ID = songname.ID 
     ORDER BY DateReviewed DESC LIMIT 1"); 
     $row = mysqli_fetch_array($q);  
     file_put_contents(data.php, '<?php return '.var_export($row,true).';?>'); 
    } 
+0

확인. 내가 isset을 원했던 이유는 mysqli_query가 한 번만 실행되기 때문이다. 즉, 페이지가 새로 고침/다시로드 된 경우 다시 쿼리를 실행하지 않는다. 이 일을 할 수있는 방법이 있습니까? 내가 POST를 제출할 수 있습니까?) –

+0

어쨌든 $ mysql_row는 어디서 온 건데 –

+0

'$ row = mysqli_fetch_array ($ q); 같은 것, 다른 변수 이름, 원하는대로 이름을 붙이십시오. – Michael

0

문제는 그입니다 .php 파일이 마지막으로 실행 된 후 $q이 설정 되었더라도 if 문이 다시 실행됩니다 (페이지 새로 고침/다시로드시).

각 PHP 스크립트는 단일 HTTP 요청을 처리합니다. 스크립트가 완료되면 모든 컨텍스트 (HTTP 요청, HTTP 응답, 변수 등)가 파괴됩니다. 새 요청은 이전 호출에 대해 알지 못하는 스크립트의 새 인스턴스에 의해 처리됩니다.

PHP 스크립트를 한 번 실행 한 정보를 다음 번에 전달해야하는 경우 sessions을 사용할 수 있습니다. 그러나 세션이 어떻게 작동하는지 설명하는 것은 [so] 대답에 너무 폭 넓은 주제입니다.

관련 문제