Параметры привязки и результаты привязки не возвращают элемент — PHP MySql

Следующая функция принимает в качестве параметра «устройство» типа 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, но функция просто возвращает начальное значение назначения, а не связанный элемент результата.

0

Решение

На мой взгляд, это может сработать (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;
}
0

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

Других решений пока нет …