Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 可以找到获取此查询的方法_Php_Database_Mysqli - Fatal编程技术网

Php 可以找到获取此查询的方法

Php 可以找到获取此查询的方法,php,database,mysqli,Php,Database,Mysqli,我想不出解决问题的办法,有没有更好的办法 它应该检查数据是否存在,如果存在,则使用数据和新数量的总和更新最后一个表数量。如果不存在,则创建表。但我无法让它工作,表只是更新。(数据库中没有数据) 以下是我的php: $SESSID = session_id(); //(session_id,bid,date_added,qty) $q = "SELECT quantity FROM cart WHERE session_id = '$SESSID' AND item_id = '$itemID'

我想不出解决问题的办法,有没有更好的办法

它应该检查数据是否存在,如果存在,则使用数据和新数量的总和更新最后一个表数量。如果不存在,则创建表。但我无法让它工作,表只是更新。(数据库中没有数据)

以下是我的php:

$SESSID = session_id(); 
//(session_id,bid,date_added,qty)
$q = "SELECT quantity FROM cart WHERE session_id = '$SESSID' AND item_id = '$itemID'"; 
$r = mysqli_query($dbc, $q);
$check = mysqli_fetch_assoc($r);
if($check=='' && $r==FALSE){
    $addtocart = "INSERT INTO cart (item_id, quantity, date_added, session_id) VALUES ('$itemID', '$qty', '$datetime', '$SESSID')";
    echo 'create';
}else{
    $total = $r + $qty;
    echo $total;
    $addtocart = "UPDATE cart SET quantity = '$total' WHERE session_id = '$SESSID' AND item_id = '$itemID'";
    echo 'update';
}
$r = mysqli_query($dbc, $addtocart);
//go to showcart 
/*header("location:../tienda?cart");*/
exit; 
}

仅尝试一个查询:

INSERT INTO `cart` (`item_id`, `quantity`, `datetime`, `session_id`)
VALUES ('$itemID', '$qty', '$datetime', '$SESSID')
ON DUPLICATE KEY UPDATE `qty`=`qty`+values(`qty`)

这假设您的数据库表已正确构建,并且在
(`item\u id`、`session\u id`)上有一个
唯一键

您可以在重复键更新时使用
插入忽略

INSERT IGNORE INTO `cart` (`item_id`, `quantity`, `datetime`, `session_id`)
VALUES ('$itemID', '$qty', '$datetime', '$SESSID')
ON DUPLICATE KEY UPDATE `qty`=`qty`+values(`qty`)

假设item_id设置为
unique

,则不需要在数据库中定义键?
mysqli_fetch_assoc
如果没有更多行可提取,则返回
NULL
。另外,使用准备好的语句可能是防止SQL注入的最简单方法。代码不止这些,我创建了用于停止SQL注入的代码,我只是添加了有用的代码。谢谢“mysqli\u fetch\u assoc”的解释。我有一个疑问。数量不能替换为数量限制?所以我必须在调用查询之前调用该值?sry,但是忽略对我来说不起作用,尽管答案很好,我无法想象忽略。