在php函数中使用变量
试图使我的网站更整洁,维护更简单,所以我尝试将大量重复的代码转移到函数中 我有一个函数,它接受一个ID参数,在where claus中使用这个ID运行数据库检查,然后为返回的rowCount设置一个新变量 但是,它始终返回0/无 我举了一个简单的例子来说明我在做什么:在php函数中使用变量,php,database,function,variables,Php,Database,Function,Variables,试图使我的网站更整洁,维护更简单,所以我尝试将大量重复的代码转移到函数中 我有一个函数,它接受一个ID参数,在where claus中使用这个ID运行数据库检查,然后为返回的rowCount设置一个新变量 但是,它始终返回0/无 我举了一个简单的例子来说明我在做什么: $buildID = 5; function select_All_Comments_From_ID($buildID){ $idNew = $buildID; global $idNew } sele
$buildID = 5;
function select_All_Comments_From_ID($buildID){
$idNew = $buildID;
global $idNew
}
select_All_Comments_From_ID($buildID);
echo $idNew;
知道为什么会这样吗
下面是它的实际外观:
function select_All_Comments_From_ID($buildID){
$query = " SELECT * FROM comments WHERE buildID = :buildID";
$query_params = array(':buildID' => $buildID);
try {
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
$row = $stmt->fetch();
$countComments = $stmt->rowCount();
global $countComments;
}
catch(PDOException $ex) { die();
}
}
然后我试着使用
$countComments
但是没有运气
代码本身在不在函数中时工作。更改
$countComments = $stmt->rowCount();
global $countComments;
在
顺便说一句,注释是正确的,这是一个糟糕的解决方案,您应该真正更改它。您必须在函数外部定义$countComments,即使它在函数内部定义为全局 例如:
<?php
$a = 1;
$b = 2;
function Sum()
{
global $a, $b;
$b = $a + $b;
}
Sum();
echo $b;
?>
您可以从函数返回值,而不是使用全局值,如下所示:
function select_All_Comments_From_ID($buildID){
$query = " SELECT * FROM comments WHERE buildID = :buildID";
$query_params = array(':buildID' => $buildID);
try {
$stmt = $db->prepare($query);
$stmt->execute($query_params);
$row = $stmt->fetch();
$countComments = $stmt->rowCount();
return $countComments; //sends the value back outside the scope of the function
}
catch(PDOException $ex) { die(); }
}
$buildID = 5;
$countComments = select_All_Comments_From_ID($buildID);
echo $countComments;
调用函数时,需要一个变量来捕获返回值,如下所示:
function select_All_Comments_From_ID($buildID){
$query = " SELECT * FROM comments WHERE buildID = :buildID";
$query_params = array(':buildID' => $buildID);
try {
$stmt = $db->prepare($query);
$stmt->execute($query_params);
$row = $stmt->fetch();
$countComments = $stmt->rowCount();
return $countComments; //sends the value back outside the scope of the function
}
catch(PDOException $ex) { die(); }
}
$buildID = 5;
$countComments = select_All_Comments_From_ID($buildID);
echo $countComments;
全局$idNew仅在变量执行时影响变量查找,而不是在执行之前。看一看
<?php
$a = 9;
foo();
function foo() {
$a = 5; // this sets the value for the variable in the local lookup table
echo $a, "\r\n"; // scope of $a is still local -> 5
global $a; // now the lookup for "a" is switched to the global scope
echo $a, "\r\n"; // $a "points" to the global value -> 9
}
对你来说呢
function select_All_Comments_From_ID($buildID){
$idNew = $buildID;
global $idNew
}
函数将值写入其本地$idNew,然后idNew的查找切换到全局范围-但这不会将本地值复制到全局范围;只是查找已更改
无论如何,正如前面指出的,您确实应该返回值,而不是全局设置它们。如果您感兴趣的只是表中匹配记录的数量,而不是记录的有效负载数据,请使用SELECT计数。。。查询否则,脚本会将所有数据从数据库服务器传输到php实例的内存空间……只需加热cpu和内存
function select_All_Comments_From_ID($buildID){
$query = " SELECT Count(*) as c FROM comments WHERE buildID = :buildID";
$query_params = array(':buildID' => $buildID);
try {
// what's $db here ?
// neither has it been passed to the function nor is it fetched from the global scope
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
$row = $stmt->fetch();
return $row['c'];
}
catch(PDOException $ex) {
// using die(...) is crude, even more so without any notice/text
die();
}
}
这是一种可怕的方式。只需返回值并将其分配给变量即可。这是一种让下一个做这件事的人变得暴力的代码。我不希望这种事情发生。。。我能问一下为什么很糟糕吗?正确的方法是什么?你说只返回值是什么意思?函数的构建是为了提供一种基于输入和算法生成输出的简单方法。您所做的并不是严格正确的,因为函数正在修改一个全局变量。通常你应该只使用return$countComments;并在外部调用函数,如$myvar=select\u ALL\u Comments\u Fom\u ID$myid。OP询问为什么$idNew aka$countComments将显示0/无。我提供的是为全局变量赋值的正确语法@user2921557抱歉我把事情搞砸了睡意会很糟糕,更新。