我有一个这样的课程:
<?php
class connection {
public $db;
public function __construct() {
$this->db = new mysqli('localhost', 'root', '', '');
if($this->db->connect_errno > 0){
die('error ' . $this->db->connect_error);
}
$this->db->set_charset("utf8");
}
}
class masssave extends connection {
public $sql;
public function insert_all {
// do some works
if ( $sql = $this->db->query("INSERT INTO $db_name ($str_db_value) values ($str_form_value_found) ")) {
return true;
}
else {
return false;
}
}
}
?>
在masssave
班级中我将$sql
设为公开,现在我想在某些页面中使用此类,例如注册页面
$save = new masssave;
if ( $save->sql = true ) {
echo 'ok';
}
else {
echo 'failed';
}
但是上面的代码不起作用,即使查询失败也总是echo 'ok'
,
我也使用if ( $save->sql == true )
,但此代码始终为echo 'failed'
我是oop的新手,但我认为我的php课程没问题,我认为我做错了检查返回值的方法
答案 0 :(得分:3)
$sql = $this->db->query
替换为$this->sql = $this->db->query
- $sql
- 局部变量。 $this->sql
- 对象属性$save = new masssave;
使用$save->insert_all()
$save->sql = true
- 分配,$save->sql == true
- 比较。 Assigment重新计算变量的值,因此$save->sql = true
始终为真。答案 1 :(得分:0)
这一行应该是......
if ( $save->insert_all() == true )
因为....首先,你只是检查是否设置了$ save-&gt; sql,在你的情况下它总是会回显。
你甚至不检查你实际上是在设置(= vs ==)
$save = new masssave;
if ( $save->sql = true )
应该......
$save = new masssave;
if ( $save->sql == true ) {
但是无论如何总会返回true,因为它只是检查变量是否存在,它确实存在。你真正想要的是我在顶部发布的内容。因为查询实际上在insert_all函数内部,这是您返回true或false的位置。
答案 2 :(得分:0)
始终echo ok
,因为您将$save->sql
设置为true
if ( $save->sql = true ) {
以上是一个很大的 NO NO 。
您想要比较它,因此使用==
来比较值
if ( $save->sql == true ) {
这样做会更简单:
if($save->sql) {
echo 'ok;
} else {
echo 'fail';
}
上述if
支票基本上是IF(TRUE) { SAY OK} ELSE { SAY FAIL}