查询停止工作一旦我们成为一个功能

时间:2011-02-17 09:25:55

标签: php

PHP教程给了我以下用于执行某个数据库搜索的代码。我把它放在content.php文件中,它正常工作

$query = "SELECT * 
         FROM subjects 
         ORDER BY position ASC";
$subject_set = mysql_query($query, $connection);
confirm_query($subject_set);

(注意,confirm_query函数是在include.php中访问的以下内容

function confirm_query($result_set){
if (!$result_set) {
    die("Database query failed: " . mysql_error());
    }
}

之后,教程告诉我(为了使其可重复使用)将$查询转换为include.php文件中的函数

因此,在include.php中我们做了这个

    function get_all_subjects() {
    $query = "SELECT * 
             FROM subjects 
             ORDER BY position ASC";
    $subject_set = mysql_query($query, $connection);
    confirm_query($subject_set);
    return $subject_set;

}

接下来,我们通过在content.php文件中使用以下内容来访问此函数

 $subject_set = get_all_subjects();

但是,现在它说“数据库查询失败”

所以将上面第一段代码移到include.php文件中会以某种方式影响查询

这是清楚的吗?

任何想法如何修复它?

3 个答案:

答案 0 :(得分:2)

在函数中,

他不知道什么是$connection变量,

将连接作为参数发送到函数

的一个选项
function get_all_subjects($connection) {
..........

}

并调用函数

$subject_set = get_all_subjects($connection);

查看变量范围manual

  

这里$a变量将是   在包含的b.inc中可用   脚本。但是,在用户定义的范围内   函数是一个局部函数范围   介绍。内部使用的任何变量   函数默认限制为   本地功能范围。例如:

<?php
$a = 1; /* global scope */ 

function test()
{ 
    echo $a; /* reference to local scope variable */ 
} 

test();
?>
  

此脚本不会生成任何内容   输出因为echo语句   是指$ a的本地版本   变量,尚未分配   此范围内的值。你可以   注意这是一点点   不同于C语言   C中的全局变量是   自动可用于功能   除非被一个特别重写   本地定义。这可能会导致一些   人们可能会遇到的问题   无意中改变了全局   变量。在PHP中,全局变量必须   在函数内声明为全局   如果它们将被用于那个   功能

答案 1 :(得分:0)

啊呀..问题是在函数中你有本地的操作范围,所以不能引用范围之外的变量。它们是按值给出的。您可以将$ connection变量作为参数添加到函数中

答案 2 :(得分:-2)

如果db连接由单独的文件处理,即“connect.php”,则必须将其包含在所有后续函数中,如下所示:

require "./connect.php";