创造,回归&在PHP中使用对象

时间:2014-09-11 14:24:35

标签: php mysqli

我有一套功能:

一个创建连接,其他人使用该功能进行不同类型的数据库交互。

我正在检索错误;

Call to undefined method mysqli::execute()

这告诉我,我未能正确发送object,我做了一些研究但没找到例子;

<?php
function con(){

$mysqli = new Mysqli("localhost","user","pass","image_blog");

if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}else{
    return $mysqli;
}};

function getAll(){

$mysqli = con();

$stmt = $mysqli->prepare("SELECT * FROM posts");
$stmt = $mysqli->execute();     <--- ERROR HERE
$stmt = $mysqli->get_result();
$stmt = $mysqli->close();

while($row = mysqli_fetch_array($stmt, MYSQL_ASSOC)) {
  echo "Username: " . $row["image"];
  echo "Username: " . $row["title"];
  echo "Username: " . $row["text"];
  echo "Username: " . $row["up"];
  echo "Username: " . $row["date"];
}
};
function anotherFunction(){

 }
 function yetAnotherFunction(){

 }

3 个答案:

答案 0 :(得分:1)

你应该自己执行语句($ stmt)而不是$ mysqli

$ stmt-&GT;执行();

还考虑在未来中使用PDO类,因为它使事情变得更容易

答案 1 :(得分:0)

应该是

$stmt->execute();
$result = $stmt->get_result();
$stmt->close();
$mysqli->close();

而不是

$stmt = $mysqli->execute();
$stmt = $mysqli->get_result();
$stmt = $mysqli->close();

请参阅official docs(也是示例)。

答案 2 :(得分:0)

我看到你正试图用你的mysqli实现连接功能。而不是单独从每个功能连接。正如史密斯先生所提到的,你已经将变量$stmt声明为:

$stmt = $mysqli->prepare('SELECT * FROM posts');

这是不正确的,因为预准备语句不会返回要在变量中使用的数据,因此会出错。

另一种方法是使用类,而另一种更高级的方法是扩展mySQLi类。

Class myClass{
    protected $dbh;
    public function __construct(){
        $this->dbh=new mysqli('','','','');
    }
    public function getAll(){
        $this->dbh->prepare('SELECT * FROM posts');
        $this->dbh->execute();
        $this->dbh->bind_result($image,$title,$text,$up,$date);
        while($this->dbh->fetch()){
            echo"Username:".$image;
            //and so on
        }
        $this->dbh->close();
    }
    public function anotherFunction(){
    }
    public function yetAnotherFunction(){
    }
}

如果您尚未使用类,则需要创建该类的实例:

$databaseUser = myClass();

开始你的功能:

$databaseUser->getAll();