Подготовленный оператор не позволяет мне вызывать $ mysqli-> stmt_init () - PullRequest
2 голосов
/ 12 июля 2011

Я делал это раньше, но я совсем новичок в mysqli и подготовил заявления (как я уверен, вы можете видеть из этого вопроса).

Где я иду не так?

здесьмоя функция соединения (часть класса 'Connect')

public function site_db()
{
    // Connect to MySQL 
    $link = mysqli_connect(SITE_HOST, SITE_ID, SITE_PW, SITE_DB); 

    // Check for Errors 
    if(mysqli_connect_errno()) 
    { 
        //echo mysqli_connect_error(); //shouldnt show client specific error information. 
        die('Error connecting to mysql database please report.'); 
    }
}

Вот функция, которая вызывает ошибку:

public function exists ($what, $who)
{

    $query = "SELECT * FROM users WHERE ? = ?";

    // Get instance of statement 
    $stmt = $mysqli->stmt_init();

    // Prepare query 
    if($stmt->prepare($query)) 
    { 
        // Bind Parameters 
        $stmt->bind_param("ss", $what, $who); 

        // Execute statement 
        $stmt->execute(); 

        // Bind result variables 
        $stmt->bind_result($result); 

        // Fetch Value 
        $stmt->fetch(); 

        // catch num_rows result as variable
        $username_result = $result->num_rows;

        // Close Statement 
        $stmt->close();
    }

    if ($username_result != 0)
    {
        return true;
        echo 'true';
    }
    else
    {
        return false;
        echo 'false';
    }
}

ошибка, которую я получаю:

Неустранимая ошибка PHP: вызов функции-члена stmt_init () для необъекта в somefile.php в строке X

Это относится к строке:

$stmt = $mysqli->stmt_init();

я делаюглупая ошибка здесь?Почему я не могу это так назвать?

РЕДАКТИРОВАТЬ //

ПРИМЕЧАНИЕ. Я не очень ясно дал понять, но эти две функции находятся в разных классах.

Ответы [ 2 ]

3 голосов
/ 12 июля 2011
public function site_db()
{
    // Connect to MySQL 
    $mysqli = mysqli_connect(SITE_HOST, SITE_ID, SITE_PW, SITE_DB); 

    // Check for Errors 
    if(mysqli_connect_errno()) 
    { 
        //echo mysqli_connect_error(); //shouldnt show client specific error information. 
        die('Error connecting to mysql database please report.'); 
    }

     return $mysqli;
}


public function exists (Mysqli $mysqli, $what, $who)
{

    $query = "SELECT * FROM users WHERE ? = ?";

    // Get instance of statement 
    $stmt = $mysqli->stmt_init();

    // Prepare query 
    if($stmt->prepare($query)) 
    { 
        // Bind Parameters 
        $stmt->bind_param("ss", $what, $who); 

        // Execute statement 
        $stmt->execute(); 

        // Bind result variables 
        $stmt->bind_result($result); 

        // Fetch Value 
        $stmt->fetch(); 

        // catch num_rows result as variable
        $username_result = $result->num_rows;

        // Close Statement 
        $stmt->close();
    }

    if ($username_result != 0)
    {
        return true;
        echo 'true';
    }
    else
    {
        return false;
        echo 'false';
    }
}

Как использовать:

Создание первого класса с методом site_db ()

$db = new Class();

Затем создайте экземпляр второго класса, который существует () метод

$query = new Class();

Тогда просто

$query->exist($db->site_db(), $what, $who );
1 голос
/ 12 июля 2011

потому что ваш $ mysqli не объявлен внутри function exists().Попробуйте использовать global $mysqli внутреннюю функцию (), если ваш $ mysqli объявлен вне функции.

Или, возможно, лучше - сделайте $ mysql новым объектом внутри вашего класса Connect:

$this->mysqli = mysqli_connect(SITE_HOST, SITE_ID, SITE_PW, SITE_DB); 

и в вашей функции существует ()

$stmt = $this->mysqli->stmt_init();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...