php mysql параметры привязки параметров

Я пытаюсь использовать подготовленные операторы в первый раз и сталкиваюсь с следующей проблемой с кодом ниже

Ошибка :

Предупреждение: mysqli_stmt_bind_param () ожидает, что параметр 1 будет
mysqli_stmt, логическое значение

Код:

 $stmt = mysqli_prepare($db, "INSERT INTO fragrances(name, description, essentialoils, topnotes, middlenotes, basenotes, reference, year, type, price, fragrancehouse, triangle, extractname, extractreference, extractprice, extractfragrancehouse, disccolour, collarcolour, actuatorcolour)
VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
mysqli_stmt_bind_param($stmt, 'sssssssssssssssssss', $name, $description, $essentialoils, $topnotes, $middlenotes, $basenotes, $reference, $year, $type, $price, $fragrancehouse, $triangle, $extractname, $extractreference, $extractprice, $extractfragrancehouse, $disccolour, $collarcolour, $actuatorcolour);

mysqli_stmt_execute($stmt);

Я рассмотрел много разных вопросов здесь, и ни одно из их решений, кажется, не подходит для моей проблемы, кто-нибудь знает, в чем проблема?

обратите внимание, все мои переменные являются строками

Спасибо

0

Решение

$stmt становится логическим только тогда, когда mysqli_prepare возвращает ложь

Когда это происходит, это означает, что он не подготовил запрос, поэтому вам нужно проверить ошибки:

$stmt = mysqli_stmt_init($db);
if (mysqli_stmt_prepare($stmt, 'INSERT INTO fragrances VALUES...')) {
//it's all good bind and execute here
}else{
//we have a problem
printf("Errormessage: %s\n", mysqli_error($db));
}
4

Другие решения

Сообщение об ошибке означает, что ваш mysqli_prepare вернул логическое значение (а для вашего случая вернул false).

Вам нужно заменить все ваше имя поля на символ ? сделать ваше готовое заявление. Вот как это работает.

Смотрите пример в официальной документации

РЕДАКТИРОВАТЬ Смотрите также mysqli_error , который подробно опишет вашу ошибку. На самом деле, вы всегда должны проверять переменную перед ее использованием:

$stmt = mysqli_prepare($db, "....");
if(!$stmt)
echo mysqli_error($db); // display error only for debug. Avoid this in production
2

Это означает, что ваш SQL был неверным, потому что prepare возвращает ложь;

Ваш SQL должен быть;

$stmt = mysqli_prepare($db, "INSERT INTO fragrances VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )");

каждый ? чтобы показать, где каждый параметр должен быть связан соответственно.

2

Ваш INSERT заявление недействительно: VALUES пункт должен быть с ? в скобках (и после имен полей в скобках). Также хорошей практикой является проверка $stmt после назначения:

$stmt = mysqli_prepare($db,
"INSERT INTO fragrances (name, description, essentialoils, topnotes, middlenotes, basenotes, reference, year, type, price, fragrancehouse, triangle, extractname, extractreference, extractprice, extractfragrancehouse, disccolour, collarcolour, actuatorcolour)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
if ($stmt) {
mysqli_stmt_bind_param($stmt, 'sssssssssssssssssss', $name, $description, $essentialoils, $topnotes, $middlenotes, $basenotes, $reference, $year, $type, $price, $fragrancehouse, $triangle, $extractname, $extractreference, $extractprice, $extractfragrancehouse, $disccolour, $collarcolour, $actuatorcolour);

mysqli_stmt_execute($stmt);
// ...
} else
printf("Error: %s\n", mysqli_error($db));
2
По вопросам рекламы [email protected]