在非对象上调用成员函数query()

时间:2014-01-06 16:35:13

标签: php sql mysqli

我收到此错误。 我知道有很多类似的问题,但我找不到任何有用的东西(可能是我的错)。

function connect(){
    $host = 'localhost';
    $db = 'db1';
    $user = 'user';
    $pwd = 'userpwd';
    return new mysqli($host, $user, $pwd, $db) or die('Cannot connect to database');
}

$dbconnection = connect();
$sql = 'SELECT * FROM users';
$queryResult = $dbconnection->query($sql);

这最后一行回到我说的错误。 这是一个非常简单的功能,我仍然不知道我做错了什么。

2 个答案:

答案 0 :(得分:4)

您遇到了运营商优先问题。您的return实际上返回的是new ... OR ...的布尔值,而不是您刚刚实例化的对象。尝试:

$con = new mysqli(...) or die(...);
return $con;

代替。

跟进:

function foo() {
   return 'foo' or die('failed');
}
function bar() {
   return false or die('failed');
}

var_dump(foo()); // outputs "bool(true)", not 'foo'
var_dump(bar()); // script exits with 'failed'

返回捕获foo OR bar的结果,并返回布尔值true / false。 OP的连接语句为WORKED(或者它会有die()'d)。然后返回的对象是or'并生成一个布尔值的真实结果,然后return编辑。

答案 1 :(得分:0)

您不需要使用功能 而是直接实例化mysqli连接。 这很有效。

ini_set('display_errors',1);

    $host = 'localhost';
    $db = 'dbname';
    $user = 'root';
    $pwd = 'password';
    $connect = new mysqli($host, $user, $pwd, $db) or die('Cannot connect to database');


$sql = 'SELECT * FROM users';
$queryResult = $connect->query($sql);

foreach ($queryResult as $user) {
        echo $user['id'];
}