用户想购买 30 件商品,除了 for 循环还有其他方法吗?
如何插入 30 个内容
public function buy($item_id)
{
$price = $this->input->post('price');
$amount = $this->input->post('amount');
$sum = $this->input->post('sum');
$price = intval($price);
$amount = intval($amount);
$sum = intval($sum);
if(!is_numeric($price) || !is_numeric($amount) || !is_numeric($sum))
{
exit("Неверные значения");
return false;
}
if(!empty($_SESSION['id']))
{
$user_id = $_SESSION['id'];
}
else
{
echo 'not logged';
exit();
}
$q = $this->db->query("SELECT * FROM users WHERE id = ".$user_id);
$t = $this->db->query("SELECT * FROM items WHERE id = ".$item_id." AND
TO_DAYS(end) - TO_DAYS(now()) >= 0");
if($this->db->affected_rows() != 0)
{
$user = $q->result_array();
$item = $t->result_array();
$active = $user[0]['active'];
$user_id = $user[0]['id'];
$money = $user[0]['money'];
$price = $item[0]['price'];
$bought_times = $item[0]['bought_times'];
$coupons = $item[0]['coupons'];
$discount = $item[0]['discount'];
$short_desc = $item[0]['short_desc'];
$status = "";
//echo $coupons;
//exit();
for($i = 0; $i < $amount; $i++)
{
if($coupons <= 0 || ($amount > $coupons))
{
$status = 'out of coupons';
break;
}
if($money >= $price)
{
$money = $money - $price;
$this->db->query("INSERT INTO user_items (`discount`, `short_desc`, `user_id`)
VALUES(".$discount.", '".$short_desc."', ".$user_id.")");
$this->db->query("UPDATE users SET money = ".$money." WHERE id = ".$user_id);
$coupons -= 1;
$this->db->query("UPDATE items SET coupons = ".$coupons." WHERE id = ".$item_id);
$q = $this->db->query("SELECT * FROM users WHERE id = ".$user_id);
$user = $q->result_array();
$money = $user[0]['money'];
$_SESSION['money'] = $money;
$status = 'buy successfull';
//redirect('');
}
else
{
//
$status = 'not enough money';
break;
}
}
switch($status)
{
case 'out of coupons':
echo 'out of coupons';
break;
case 'buy successfull':
$bought_times += 1;
$this->db->query("UPDATE items SET bought_times = ".$bought_times." WHERE id = ".$item_id);
echo 'buy successfull';
break;
case 'not enough money':
echo 'not enough money';
break;
}
/*foreach($q->result_array() as $u);
{
$_SESSION['id'] = $u[0]->id;
$_SESSION['email'] = $u[0]->email;
redirect('');
}*/
//return 'trolol';
}
else
{
echo 'out of time';
}
//echo $user_id;
}
这是ajax请求的 Controller ,在我的本地机器中一切正常,但在托管中它给出错误。
我需要减去金钱并减去优惠券并插入行取决于用户金额
你能给我关于这段代码的建议吗?
最佳答案
使您的查询更加动态,只有一次查询才尝试使用循环进行串联,这可能会产生如下查询:
INSERT INTO my_table(column1, column2, column3) VALUES ('VAL1','VAL2', 'VAL3'), ('VAL1','VAL2', 'VAL3'), ('VAL1','VAL2', 'VAL3'), ('VAL1','VAL2', 'VAL3') ...
通过这种方式,您可以只抛出一个查询,但可以将多个项目插入表中,只需用逗号 (,) 分隔每组值即可。
关于php - MYSQL如何发出多个请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9499329/