Intereting Posts
PHP XPath. Как вернуть строку с тегами html? update_post_meta для WordPress Yoast SEO Отобразить список элементов, сгруппированных по годам и месяцам в TYPO3 Fluid Создание настраиваемого объекта ответа JSON с помощью Zend Action Helper ContextSwitch Предоставить загрузочную папку для этих разрешений безопасно или нет? отключение кеша браузера в php или использование javascript Apache. Могу ли я сделать прокси-сервер только с Apache? Быстрый способ (или альтернативный путь) для динамической загрузки 40000 ссылок на карту изображения? Kohana 3: Пример модели с проверкой Получите uniq случайные строки из файла и напишите их в другой файл, используя php Что возвращает $ _GET , если ключ не установлен? проверка типов ввода «флажок» и «число» php / html Как включить данные массива в CURLOPT_POSTFIELDS? Как вы можете сравнивать наборы чисел и получать наиболее релевантные результаты с использованием MySQL и PHP? Что такое шаблон фабричного проектирования в PHP?

Подготовленный оператор не позволяет мне называть $ mysqli-> stmt_init ()

Я сделал это раньше, но я совершенно новичок в 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(); 

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

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

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

 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(); 

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

 $query = new Class(); 

Тогда просто

 $query->exist($db->site_db(), $what, $who ); 

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

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

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

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

 $stmt = $this->mysqli->stmt_init();