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