2010-01-16 3 views
1

나는 배우려고 노력하고있어. 왜 이것이 작동하지 않는지 나는 이해하지 못한다. include를 종료하고 함수 호출을 제거하고 함수에서 데이터베이스 연결을 랩핑하지 않으면 제대로 작동합니다.PHP mysql_query 오류

내가 여기에없는 것은 무엇입니까?

오류 메시지 :

경고 :는 mysql_query() : 공급 인수가 라인 (24) 데이터베이스 쿼리에 /home3/badamsne/public_html/views/dogs.php에 유효한 MySQL의 링크 자원 아닙니다 실패

웹 페이지 코드 : 별도의 파일에

<?php 
    include("../model/db_conn.php"); 

    db_conn(); 
?> 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <title></title> 
</head> 
<body> 
    <?php 



    // 3. Perform database query 
    $result = mysql_query("SELECT * FROM dogs", $connection); 
    if(!$result) { 
     die("Database query failed: " . mysql_error()); 
     } 

    // 4. Use returned data 
      while ($row = mysql_fetch_array($result)) { 
       echo $row[0]." ".$row[1]."<br />"; 
      } 
    ?> 
</body> 
</html> 
<?php 
// 5. Close connection 
    mysql_close($connection); 
?> 

PHP 기능 :

<?php 

function db_conn() { 

    // 1. Create database connection 
    $connection = mysql_connect("localhost","website_admin","[email protected]"); 
    if(!$connection) { 
     die("Database connection failed: " . mysql_error()); 
     } 

    // 2. Select a database to use 
    $db_select = mysql_select_db("website_db", $connection); 
    if(!$db_select) { 
     die("Database selection failed: " . mysql_error()); 
     } 
} 
?> 

감사! Tom

+0

어떻게 말할 수는 있지만 $ 연결 변수에 문제가 있습니다. PHP는 어쨌든 전역 연결 객체를 유지합니다. 아마도 그것은 불필요하기 때문에 mysql_query 호출에서 그 변수를 제거 할 수있을 것이다. $$ connection = mysql_query ("SELECT * FROM dogs"); $ – zneak

+0

$ connection에 문제가 없으므로 같은 범위에 있지 않습니다;) – svens

+0

반복하지 마십시오. mysql_ * 인터페이스를 사용하십시오. mysqli 또는 PDO로 전환하십시오. 그것은 더 이상 사용되지 않으며 최신 PHP 릴리스에서 사라졌습니다. –

답변

4

함수에서 $ connection을 반환하지 않으며 상위 파일의 변수로 캡처하지 않습니다. ?

<?php 
include("../model/db_conn.php"); 

db_conn(); 

>

이 사람 :이

변경?

<?php 
include("../model/db_conn.php"); 

$connection = db_conn(); 

>

그리고이

return $connection; 
추가 귀하의 기능에

.

+0

변수의 "동작"은 http://docs.php.net/language.variables.scope에서 설명합니다. – VolkerK

+0

Meh, 맞습니다. 나는 그것을 간과했다. – zneak

0

$ connection 변수가 글로벌 변수가 아닙니다. 이는 db_conn() 함수의 컨텍스트에서 "가시적"이며 주 프로그램에서는 볼 수 없음을 의미합니다. 문제에 대한 세 가지 간단한 해결책이있다

:

  1. 추가 '글로벌 $ 연결;' 귀하의 기능에 대한 첫 번째 명령으로.
  2. 하나의 연결을 방금 연 경우 mysql_query 함수에 MySQL 연결 리소스를 제공 할 필요가 없습니다. 그래서 'mysql_query ("SELECT * FROM dogs");' 너무 일할 것입니다.
  3. 함수에서 $ connection 변수를 반환 할 수도 있습니다.
0

$connectiondb_conn() 함수의 로컬 변수로 생성 된 것 같습니다. 다른 코드에 접근 할 수있는, 그래서 당신은 글로벌 선언 할 수 :

function db_conn() 
{ 
    global $connection; 

    $connection = mysql_connect(...); 

} 

// now $connection is available everywhere 

참고 : 대부분의 프로그래밍 언어는 전역 변수를 남용에 대한주의 사항이 있습니다. W.A. Wulf and M. Shaw (ACM SIGPLAN, 1973)의 Global Variables Considered Harmful 참조.

+0

당신 빌 남자! 고마워. 네가 도와 줘서 고맙다. – Tom