2014-02-18 7 views
2

두 개의 PHP 파일이 있습니다. 파일 addbasket.php이 아약스 호출 및 기사에 대한 매개 변수를 주어 addbasket.php

<?php  
session_start(); 
$link = $_SESSION['link']; 
if (isset($_SESSION['userid'])) {......} 
?> 

index.php를

<?php 
session_start(); 
$_SESSION['link'] = mysqli_connect("localhost","test","test","dbname"); 
$link = $_SESSION['link']; 
.... 
?> 

(번호) 오전 이모 (번호)

그러나 mysqli_query는 작동하지 않습니다. $_SESSION['link']은 addbasket.php에없는 것 같습니다. $_SESSION['userid']이 있으니 바로 세션이 될 수 없습니다. 에코 될 수 있습니다.

여기에서 문제가 될 수있는 것은 무엇입니까?

+0

'$ _SESSION [ 'link'] = mysqli_connect ("localhost", "test", "test", "dbname"); – ponciste

+0

Ajax 호출을 제외한 모든 페이지에서 작동합니다. – HKK

+0

그것의 모든 페이지에 대한 mysqli_connect 설정, 그래서 호스트가 변경되면, 나는 모든 PHP 파일 (약 50)에 대한 텍스트를 변경하지 않아도됩니다. 단지 index.php에서 변경할 수 있습니다. – HKK

답변

3

$_SESSION에 고정 할 수없는 이유입니다.

mysqli_connect은 리소스를 반환합니다. 리소스는 이 아니며은 직렬화 가능합니다.

모든 요청에서 해당 DB 연결을 인스턴스화해야합니다.

편집 : 이제 실제 문제를 이해합니다. 는 당신이 필요로하는 것은이 어떤 형태입니다 :

db.php를

$link = mysqli_connect("localhost","test","test","dbname"); 

index.php를

require 'db.php'; 
$r = mysqli_query($link, 'SOME QUERY...'); 
.... 

addbasket.php

require 'db.php'; 
$r = mysqli_query($link, 'SOME OTHER QUERY...'); 
.... 
+0

다른 모든 페이지에서 작동하는 이유는 무엇입니까? – HKK

+0

웹 서버의 작동 방식을 이해해야합니다. index.php에 파일을'include'하거나'require' 할 때 코드는 같은 프로세스에서 실행되지만 AJAX 요청을하면 웹 서버는 index.php가 실행되고있는 것과 아무 것도 공유하지 않는 새로운 프로세스를 시작합니다. –

+0

예 ..하지만 인덱스는 다음과 같습니다 :''그리고 작동 ... – HKK

1

당신은 자원 객체를 직렬화하지 못하고, 당신은 단지 직렬화 데이터를 저장할 수 세션

+0

하지만 그것은 아약스에 의해 호출되지 않는 일반적인 PHP에서 작동합니다 – HKK

+0

나는 그것에 의해 생각 기본값은 현재 opend DB 링크를 사용하기 때문에 어떤 경우에는 작동합니다 - 현재 스크립트 실행 중에 연결을 opend했을 때 –

+0

로드 할 때 스크립트에 "text"링크를 저장하는 방법이 없습니다. ? 스크립트를 실행하기 전에 에코처럼 ... ... – HKK