3

我收到此错误:

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

此外,当我使用其他 MySQLi 函数时,它会给我同样的错误,但对于该函数。

我的connection.php

<?php
$mysqli = new mysqli("localhost","user","pass","db");
if(mysqli_connect_errno()){
  trigger_error('Connection failed: '.$mysqli->error);
}

?>

我的功能:

function form_year($find, $value, $from, $vehicletype){
    //Query setup
    $autoquery = "SELECT    
                        Year, 
                        Vehicle, 
                        Brand, 
                        Model, 
                        Type, 
                    FROM 
                        vehicle_tbl
                    WHERE
                        Vehicle = '".$vehicletype."'
                    GROUP BY
                        Year";
    $autoresult = $mysqli->query($autoquery);

    $search = array("%value%", "%options%");
    $rows = file_get_contents("tpl/options.html");
    while($row = $autoresult->fetch_assoc()){
        $replace = array($row[$value], $row[$value]);
        $tr .= str_replace($search, $replace, $rows);
    }
    return str_replace($find, $tr, $from);
}

函数和连接包含在调用函数的地方

4

4 回答 4

7

快速/肮脏的修复:

  function form_year($find, $value, $from, $vehicletype){
    //Query setup
    global $mysqli;
    $autoquery = "SELECT  [...]
于 2013-01-28T23:21:43.617 回答
1

您可能想尝试删除后面的逗号,Type因为这可能是 MySQL 字符串的语法错误。也尝试回应$mysqli->error并查看它所说的内容。

于 2013-01-28T23:23:57.303 回答
1

您的$mysqli对象在全局范围内,而不是在函数范围内。您应该将mysqli对象作为参数传递给函数,以便您可以访问它。所以是这样的:

function form_year($find, $value, $from, $vehicletype, $db){
    ...
    $autoresult = $db->query($autoquery);
    ...
}

注意我还将在函数中添加一些验证以确保传递了正确的 mysqli 对象,但未显示。

于 2013-01-28T23:27:16.040 回答
0

您必须确保您的 $mysqli 在范围内可用(在您的函数中不是这种情况)。一些可用的解决方案:全局、传入参数、单例。Personnaly 我通常为我的数据库连接做单例,像这样:

class DB {
private static $_instance;

public static function get() {
    if(!isset(self::$_instance)) {
        self::$_instance = new mysqli("localhost","user","pass","db");
        if(mysqli_connect_errno()) {
            trigger_error('Connection failed: '.self::$_instance->error);
        }
    }
    return self::$_instance;
}
}

//Calling

$autoresult = DB::get()->query($autoquery);
于 2013-01-28T23:27:14.160 回答