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

TypeMySQL文字列の構文エラーである可能性があるため、後でカンマを削除してみてください。また、エコー$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がスコープで使用可能であることを確認する必要があります(これは関数には当てはまりません)。利用可能ないくつかのソリューション:グローバル、引数の受け渡し、シングルトン。個人的には、私は通常、データベース接続に対して次のようなシングルトンを実行します。

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 に答える