尝试在php中传递结果变量的数量
我通过一个函数传递sql查询,该函数返回SELECT查询的结果数。结果是mysqli_num_rows()方法的正确计数,但不会将计数器变量设置为该数字,而是将计数器保持为其原始值尝试在php中传递结果变量的数量,php,mysqli,return,visibility,Php,Mysqli,Return,Visibility,我通过一个函数传递sql查询,该函数返回SELECT查询的结果数。结果是mysqli_num_rows()方法的正确计数,但不会将计数器变量设置为该数字,而是将计数器保持为其原始值 public function getNum($sql){ $count = 0; //set the count variable if($result = $this->query($sql)){ //echo 'No results for criteria';
public function getNum($sql){
$count = 0; //set the count variable
if($result = $this->query($sql)){
//echo 'No results for criteria';
$count = mysqli_num_rows($result); //count is properly set to number
} //does not modify outside count variable
return $count; //returning 0 or whatever count was originaly set to
} //count does not change despite $count inside the if statement being changed
下面是$this->查询的内容
public function __construct(){
$this->mysqli = new mysqli('localhost', 'root', '', 'mydb');
}
public function query($sql){
return $this->mysqli->query($sql);
}
我确信查询正在执行。问题是没有为返回更改变量。据我所知,您希望在函数内部设置变量
$count
,但您应该知道函数内部的变量不能在外部访问,反之亦然,这是因为
您可以尝试以下方法:
var $count;
function set_count($new_value) {
$this->count = $new_value;
}
function get_count() {
return $this->count;
}
public function getNum($sql){
$count = 0; //set the count variable
if($result = $this->query($sql)){
$count = mysqli_num_rows($result);
}
//set `$count`
$this->set_count($new_value);
return $count;
}
//and if you want to get the count
echo $this->get_count();
您是否100%确定查询已执行<代码>$this->query您可以共享该方法的代码吗?您传递给此方法的查询?显示更多代码请知道sql正在运行,如果我将echo$count放在if语句中,它已回显了正确数量的结果。但是在外部,$count变量没有改变,我从来没有见过对象风格和过程风格的数据库操作像这样混合。在离开if(){}块之前,您确定$count实际上有一个值吗?你能生成完整的代码和输出吗?@Gralgrathor你可以混合使用面向对象和过程的
mysqli\ucode>。它是有效的,因为过程性的基本上调用对象性的。不过,您应该坚持使用其中一种方法-在整个代码中使用相同的方法,但它是有效的。这不是变量范围问题,因为变量是在getNum()
方法中定义的,并在方法中返回的。函数中定义的变量不能在外部访问,return不返回$var
变量它只返回变量的值。它们可以从函数返回,在调用后在全局范围内使用。它确实返回了值,但这就是您所需要的因为隔离和正确使用,它工作-我已经尝试过了。据我们所知,OP试图使用$result=$something->query($sql);echo$result->getNum($sql)全局范围中的code>,这将不起作用,因为他将调用query()
方法两次。我怀疑这是一个范围问题,更像是如何调用方法——但正如你自己所说,“这就是为什么我们需要更完整的代码”——这反过来又使问题更难回答(应该等到我们知道所有事实):-)谢谢大家提供的意见。看起来这个错误是由于在我传递给查询的变量周围没有包含单引号引起的。。。很尴尬,但谢谢你验证我的面向对象方法。