Следующая функция принимает в качестве параметра «устройство» типа string и использует его для запроса к моей таблице запасов, чтобы увидеть, что есть в наличии для этого устройства (для каждого устройства существовало ограничение UNIQUE). Он ДОЛЖЕН вернуть целое число, но продолжает возвращать NULL. Моя IDE также подчеркивает переменную $ stock как неопределенную в пределах bind_result, однако я прекрасно следил за онлайн-примерами этого. Куда я иду не так?
function get_stock_level($device) {
GLOBAL $db;
$sql = 'SELECT in_stock
FROM stock
WHERE device = ?';
$stmt = $db->prepare($sql);
$stmt->bind_param('s', $device);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($stock);
return $stock;
}
Постскриптум Я также попытался сначала определить $ stock, но функция просто возвращает начальное значение назначения, а не связанный элемент результата.
На мой взгляд, это может сработать (PDO, а не MySQLi):
function get_stock_level($device) {
GLOBAL $db;
$sql = 'SELECT in_stock
FROM stock
WHERE device = :device';
$stmt = $db->prepare($sql);
$stmt->bindValue(':device', $device,PDO::PARAM_STR);
$stmt->execute();
$stock = $stmt->fetch();
return $stock;
}
Я использовал подготовить таким образом, вы можете сохранить результат непосредственно в новую переменную.
Если есть более одного результата, используйте fetchAll () вместо fetch ().
Кроме того, это не так:
$stmt->bind_param();
должно быть:
$stmt->bindParam();
MySQLi:
function get_stock_level($device) {
GLOBAL $db;
$sql = 'SELECT in_stock
FROM stock
WHERE device = ?';
$stmt = $db->prepare($sql);
$stmt->bind_param('s', $device);
$stmt->execute();
$stmt->bind_result($stock);//bind result variables
$stmt->fetch();
$stmt->close();//close statement
$db->close();//close connection
return $stock;
}
Других решений пока нет …