Я пытаюсь получить доступ к MySQL через PHP, но я получаю эти сообщения об ошибках.
Примечание: неопределенная переменная: stmt в /var/www/contact.php в строке 60
Неустранимая ошибка: вызов функции-члена bind_param () для необъекта в /var/www/contact.php в строке 63
Мой код:
<?php
$servername = "localhost";
$username = "test";
$password = "test";
$dbname = "test";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// LINE 60
if(!$stmt = $conn->prepare("INSERT INTO MyGuests VALUES(?, ?, ?)") || !is_object($stmt)){
die( "Error preparing: (" .$conn->errno . ") " . $conn->error);
}
//LINE 63
$stmt->bind_param("sss", $firstname, $lastname, $email) ;
Объектом является $ conn, поэтому, если вы хотите включить его в оператор if, вы можете, но не обязательно.
Предполагаю, что таблица MyGhest в виде столбца id и фамилии, fisrtname, столбца электронной почты. Вам нужно указать фактический столбец в SQL: «INSERT INTO MyGhest (имя, фамилия, адрес электронной почты) VALUES (?,?,?)»
Переменная $ stmt еще не определена. Так что вы не можете сказать! $ Stmt, функция не будет работать. Сделать что-то вроде:
$stmt = "";
if(!($stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)"))){
die( "Error preparing: (" .$conn->errno . ") " . $conn->error);
}
$firstname = "John";
$lastname = "Doe";
$email = "[email protected]";
if(!($stmt->bind_param("sss", $firstname, $lastname, $email))){
die( "Error in bind_param: (" .$conn->errno . ") " . $conn->error);
}$stmt->execute();
Упростите обнаружение ошибок. Оберните оператор присваивания в скобках. Забудьте is_object (). Попробуй это.
if( !( $stmt = $conn->prepare( "INSERT INTO MyGuests VALUES(?, ?, ?) " ) ) {
die( "Error preparing: (" .$conn->errno . ") " . $conn->error);
}
Обычно это лучше всего в INSERT
заявление, чтобы разобрать имена столбцов, например,
INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)
Если столбцы таблицы не совсем соответствуют вашим ожиданиям, ваш INSERT не может работать правильно, не перечисляя столбцы. Это случается с примером на w3schools. Они определяют MyGuests
таблица с несколькими столбцами, чем вы используете в INSERT.
Выполните обнаружение ошибок в bind_param, так же, как и на prepare.
Определите переменные, которые вы используете в bind_param () перед их использованием. Попробуй это:
$firstname = "John";
$lastname = "Doe";
$email = "[email protected]";
if (!$stmt->bind_param("sss", $firstname, $lastname, $email)) {
die( "Error in bind_param: (" .$conn->errno . ") " . $conn->error);
}
$stmt->execute();
w3schools? В самом деле? Друзья не пускают друзей …. и т. Д.
Первая ошибка
Примечание: неопределенная переменная: stmt в /var/www/contact.php в строке 60
Вы должны объявить переменные перед использованием.
Как эти переменные:
$ servername = «localhost»;
$ username = «test»;
$ password = «test»;
$ dbname = «test»;
определить переменную stmt
$ stmt = «»;
или удалите его из оператора if
$ stmt = $ conn-> prepare («ВСТАВЬТЕ В ЗНАЧЕНИЯ MyGhest (?,?,?)»)
Это решит ваши ошибки