我正在努力寻找帮助。我有一个名为products的表,两个重要的列是productPrice和productRewards。
我可以通过表单在我的管理控制台中手动插入数据并显示所有产品,就好了。
基本上,我想获取productPrice字段的值,并使用floor()将其舍入并应用于productRewards字段。
示例:如果admin输入199.99到productPrice的输入字段199将自动输入到productRewards字段中。
if(isset($_POST['add_product'])) {
$productRewards = $_POST['productRewards'];
$productPrice = $_POST['productPrice'];
$query = "INSERT INTO products( productPrice, productRewards ) VALUES ";
$query .= "( {$productPrice}, {$productRewards} ) ";
$add_product_query = mysqli_query($connection,$query);
}
以上是与管理表单中的数据插入我的数据库相关的2列。
我正在努力解决这个问题,我知道如何使用floor()函数,但是在发送数据之前,我无法获得一个插入值的值并将其转换。我尝试将我的价值改为:
"INSERT INTO products ( productRewards ) VALUES "; ( {floor $productPrice} ) ";
但是如果我输入23.99,插入我数据库的数据是24.所以我发送数据,但是phpMyAdmin正在向上舍入,因为它是一个整数列,所以我的数据至少到了正确的位置,但我的逻辑是错误的,因为我的floor()函数没有做我想做的事情(我知道我没有正确地问它:/)。任何指针都会受到极大的欢迎,谢谢。
答案 0 :(得分:0)
你可以直接在sql
中做 "INSERT INTO products ( productRewards ) VALUES ( FLOOR($productPrice) ) ;"
但不应该在sql中使用php var,因为你有sqlinjection风险
所以你应该看一下binding_param
的SQL驱动程序答案 1 :(得分:0)
您应该使用PDO而不是像这样的SQL函数。这可能无法直接解决您的问题,但这是一个更好的做法,因此您不会像SQL注入那样容易受到攻击。
您可以使用以下代码执行此操作:
if(isset($_POST['add_product'])) {
$productRewards = floor($_POST['productRewards']);
$productPrice = floor($_POST['productPrice']);
$host = '127.0.0.1';
$db = 'dbname';
$user = 'dbusername';
$pass = 'dbpass';
$charset = 'dbcharset';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$opt = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
$pdo = new PDO($dsn, $user, $pass, $opt);
$query = $pdo->prepare('INSERT INTO products(productPrice, productRewards) VALUES (:productPrice, :productRewards)');
$query->bindValue(':productPrice', $productPrice, PDO::PARAM_STR);
$query->bindValue(':productRewards', $productRewards, PDO::PARAM_STR);
$add_product_query = $query->fetch(PDO::FETCH_ASSOC);
}
你也可以在数据库中使用浮点数:)