Почему ошибка в выводе? Number of variables doesn't match number of parameters in prepared statement
Почему вылазит Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters in prepared statement in...?
$idGoods = $_POST['add_id'];
$idCookie = $_POST['id_cookie'];
function getGoodsCartModal($p1) {
global $mysqli;
$sql = mysqli_prepare($mysqli, "SELECT * FROM cart WHERE idGoods = '$p1'");
mysqli_stmt_bind_param($sql, 's', $p1);
mysqli_stmt_execute($sql);
$result = mysqli_stmt_get_result($sql);
$a = mysqli_fetch_assoc($result);
return $a;
mysqli_stmt_close($sql);
}
$getGoodsCartModal = getGoodsCartModal($idGoods);
if(isset($_POST['add_id'])){
echo $getGoodsCartModal['idCookie'];
}
Ругается на строку 18, где mysqli_stmt_bind_param($sql, 's', $p1);
Ответы (2 шт):
$sql = mysqli_prepare($mysqli, 'SELECT * FROM cart WHERE idGoods = ?');
Раз вы используете prepared statements (mysqli_stmt_bind_param), не нужно добавлять в запрос инъекцию.
return $a;
mysqli_stmt_close($sql); // Недостижимый код, строку нужно либо удалить, либо перести выше return
Продолжим урок английского, начатый коллегой aleksandr barakin
- number значит номер, количество
- variable означает переменная
- doesn't match означает не совпадает
- number означает номер, количество
- parameter означает параметр, знак подстановки
- prepared statement означает подготовленный запрос
то есть текст ошибки, в переводе с английского, означает, что количество переменных, которые мы привязаваем к запросу в функции bind_param, не соответствует количеству параметров (знаков вопроса) в запросе.
Идем в код и считаем:
количество переменных в bind_param: 1 (одна) штука
количество параметров: 0 (ноль) штук
Для решения проблемы необходимо привести количество параметров (знаков вопроса) в запросе соответствие с количеством переменных функции bind_param. т.е. добавить в запрос параметр (знак вопроса) в количестве 1 (одна) штука. Удалив при этом из запроса переменную. Поскольку суть подготовленных запросов и состоит в том, чтобы заменять переменные на параметры.
В целом, проблема показывает преимущество грамотности (т.е. умения читать) и знания иностранных языков перед неграмотностью (т.е. неумением читать) и незнанием иностранных языков в объеме слов number, variable и parameter.