Как увеличить значение MySQL из значения текстового поля?

Я пытаюсь обновить значение в MySQL, чтобы увеличить число. Предположим, что текущее значение равно 50, и если я введу 50 в текстовом поле, значение mysql станет равным 100. На самом деле с кодом ниже его единственное обновление с помощью текущее значение текстового поля.

     function updateMaterial($code){
global $conn;
$sql = $conn->prepare("SELECT * FROM stock WHERE itemcode = '$code'");
$sql->execute();
while($row = $sql->fetch(PDO::FETCH_ASSOC)){
$this->id = $row['id'];
}
if(isset($_POST['qty'])){

$sql = $conn->prepare("UPDATE stock SET qty='qty +$this->qty' WHERE id='$this->id'");
$sql->execute();

}

}

if(isset($_POST['update'])){
$code = $_POST['itemcode'];
if($addstock->updateMaterial($code)){
return true;
}else{
return false;
}
}

-4

Решение

У вас есть имя столбца внутри кавычки, я бы сказал, что запрос на самом деле терпит неудачу, как у вас, но вы не проверяете на наличие ошибок. Чтобы доказать это предположение, протестируйте, передав 10 с экрана, и убедитесь, что значение 50 в базе данных никогда не меняется.

Вы также должны использовать подготовленный оператор для защиты от SQL-инъекций.

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

Кроме того, поскольку это метод класса, переменная $ conn не должна собираться с использованием global это разрушает инкапсуляцию класса. Это должно быть свойство класса

class xxx
{
private $conn;

public function __construct($db_conn)
{
$this->conn = $db_conn;
}function updateMaterial($code){

$sql = $this->conn->prepare("UPDATE stock SET qty=qty+:incqty
WHERE WHERE itemcode = :code");
$param = array(':incqty'=>$this->qty, ':code'=>$code);
$sql->execute($param);

if ( ! $sql ) {
// while testing
$arr = $sql->errorInfo();
print_r($arr);
exit;
}
}

Теперь, когда вы создаете экземпляр объекта, передаете дескриптор соединения с базой данных.

$xxx = new xxx($conn);
$xxx->qty = 30;
$xxx->updateMaterial($code);
1

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector