第35行数组(0){}上的数组到字符串转换,我收到此错误?

时间:2017-09-21 11:57:47

标签: php arrays oop mysqli

所以我正在研究PHP,因此我了解了 __ call()方法,因为它调用了未知方法,因此我将方法 name 称为它是我的数据库的表名,因为我想从数据库访问所有序列号(sn)并使用此方法在屏幕上打印。我知道我的代码中存在很大的错误而且我没有得到它,我很惊讶。请帮忙! 如果你没有明白我的意思那么请问,我会解释一下!

我实际上想要从这个脚本中获取的是我希望使用__call()方法从数据库访问,并使用var_dump()从数据库中获取数据,就像我在这里一样,

public function getOne($table_name) {
        $rss= mysqli_query(self::$connection,"SELECT * FROM $table_name LIMIT 1");
        return mysqli_fetch_assoc($rss);
    } 

这里我直接从数据库获取所有数据并在屏幕上回显,但是使用__call()我也想做同样但有行。我怎样才能做到这一点? 另外__call()的实际用途是什么?

class mysql_db {
    private static $instance;
    public static $connection;

    public function __construct($host=null, $user=null, $password=null, $db=null) {
        if(!self::$instance && !$host) {
            throw new \Exception("Missing Database..!!!");
        }
        self::$connection = mysqli_connect($host,$user,$password,$db);
    }

    public function __destruct() {
        mysqli_close(self::$connection);
    }       

    public function getData($table_name) {
        $rs= mysqli_query(self::$connection,"SELECT * FROM $table_name");
        return mysqli_fetch_all($rs,MYSQLI_ASSOC);
    }

    public function getOne($table_name) {
        $rss= mysqli_query(self::$connection,"SELECT * FROM $table_name LIMIT 1");
        return mysqli_fetch_assoc($rss);
    }

    public function find($table_name,$sn,$val) {
        $rq= mysqli_query(self::$connection,"SELECT * FROM $table_name WHERE $sn='$val'");
        return mysqli_fetch_all($rq,MYSQLI_ASSOC);
    }


**//   I AM GETTING ERROR FROM THESE LINES**

//->    public function __call($table_name,$sn) {
//->        //var_dump("SELECT * FROM $table_name where sn='1'");
//->        $rt= mysqli_query(self::$connection,"SELECT * FROM $table_name 
            WHERE '$sn'")or die(mysqli_error()) ;
//->        return mysqli_fetch_all($rt,MYSQLI_ASSOC);
    }

    public static function getInstance() {
        try {
            if(!self::$instance) {
                self::$instance=new static('localhost','root','','xam');
            }
        } catch(\Exception $e) {
            echo 'Caught Error: ', $e->getMessage(), "\n";
        }
        return self::$instance;
    }
}
$h= mysql_db::getInstance();
var_dump($h->name("1"));

1 个答案:

答案 0 :(得分:1)

__call()方法是php魔术方法之一。

正如文件中所述:

  

在与属性交互时调用重载方法   或者尚未声明或在其中不可见的方法   当前范围

关于__call()魔法:

  在对象上下文中调用不可访问的方法时,会触发

__ call( string $ name, array $ arguments)。

为什么你的代码无效?

错误消息指出您正在尝试将数组转换为字符串。因此,您传递给$sn方法的变量__call()可能不是数组。   此外,您还没有正确连接字符串。如果要在字符串中注入变量。正确的术语是字符串插值,它应该如下实现:

echo "Variables should always be inside brackets. My {$name} is!"

另外,请记住清理您的查询以避免sql注入!检查此answer