【发布时间】:2016-08-07 20:58:05
【问题描述】:
您好,这是这个问题的升级版: query mysql database from inside a class 与上一个问题的不同之处在于,我需要动态查询而不是静态查询或 l$query = "SELECT col_1 FROM db.table";因此,为了进行动态查询,我需要使用属性(或变量),这样我就可以从同一个类中调用不同的表,或者像这样的“SELECT ‘$data’ FROM ‘$table’”;
到目前为止,我的班级看起来是这样的,类似于上一个问题:
$mysqli = new mysqli("localhost", "root", "", "intranetpugle");
class crudmum {
private $table;
private $data;
private $mysqli;
function __construct($mysqli) {
$this->mysqli = $mysqli;
}
function runQuery($data2, $table2)
{
$this->table = $table2; $this->data = $data2;
$query = "SELECT '$this->data' FROM '$this->table' ";
$stmt = $this->mysqli->prepare($query);
$stmt->execute();
$stmt->bind_result($r);
while($stmt->fetch())
{
echo "<option>" . $r . "</option>";
}
}
};
这就是我运行它的方式:
$showme = new crudmum($mysqli);
$showme->runQuery("priority", "trackboards" );
注意:当我不使用查询中的变量或属性或类似的东西时,从轨迹板中选择优先级,查询确实有效,只有当我输入属性或变量时(如给定的示例) 它不起作用。
我收到此错误:
致命错误:在 C:\xampp\htdocs\devserv\i+d\bootstrap\functions.php 中的非对象上调用成员函数 prepare()第 76 行
任何人都知道我做错了什么,当然数据库查询有一个错误关于如何在类中以动态方式正确查询数据库的任何想法,抱歉新的 OOP 和 PHP!
【问题讨论】:
-
你能回显你的查询吗?"$query = "SELECT '$this->data' FROM '$this->table' ";"并退出代码,以便我们检查问题所在。
-
用文字查询
SELECT priority FROM trackboards替换您的选择,看看它是否有效。如果是这样,那么您的属性有问题。 -
嗨,SELECT priority FROM trackboards 确实有效,只有当我输入属性或变量时它才有效
-
这些是单独的文件还是一个文件?
-
在使用参数时没有意义,致命错误得到解决并且 runQuery 函数返回一些结果。
Call to a member function prepare() on a non-object明确指出$this->mysqli不是mysqli 数据库资源。根据您提供的错误,使用文字查询进行检查应该绝对没有区别。
标签: php mysql database class oop