我有一套功能:
一个创建连接,其他人使用该功能进行不同类型的数据库交互。
我正在检索错误;
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(){
}
答案 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();