【问题标题】:mysqli insert query returning falsemysqli插入查询返回false
【发布时间】:2018-10-30 18:21:59
【问题描述】:
function cart() {

    if(isset($_GET['add_cart'])){

        global $connect;

        $ip = getIp();
        $pro_id = $_GET['add_cart'];
        $check_pro = "SELECT * FROM cart WHERE ip_add = '$ip' AND p_id = '$pro_id'" ;
        $run_check = mysqli_query($connect, $check_pro);

        if(mysqli_num_rows($run_check)>0){
            echo "do a thing";
        }else {
            $insert_pro = "insert into cart (p_id,ip_add) values ('$pro_id','$ip')";
            $run_pro = mysqli_query($connect, $insert_pro);
            if($run_pro){
                echo "<script>window.open('index.php','_self')</script>";
            }
        }

    }

我很可能错过了一些如此明显的东西,所以提前谢谢你。

【问题讨论】:

  • 您应该检查mysqli errors,以了解何时出现问题。此外,您对 SQL 注入持开放态度。由于您使用的是 mysqli,因此请利用 prepared statementsbind_param这将解决可能出现的任何令人讨厌的引用问题。

标签: php database mysqli insert


【解决方案1】:

qty 列没有默认值,并且您在插入新行时没有为其提供值。这将导致错误。您需要指定一个值,例如0.

另外,由于p_idINT 列,您不需要将值放在引号中。

$insert_pro = "insert into cart (p_id,ip_add, qty) values ($pro_id,'$ip', 0)";

但更好的是使用准备好的语句来防止 SQL 注入。

$insert_pro = $connect->prepare("insert into cart (p_id,ip_add, qty) values (?, ?, 0)");
$insert_pro->bind_param("is", $pro_id, $ip);
$run_pro = $insert_pro->execute();

【讨论】:

  • 谢谢您,先生,我已经盯着我的代码一周了,不知道出了什么问题
  • 这就是您应该打印 SQL 错误消息的原因。它会说明qty 没有默认值。
猜你喜欢
  • 1970-01-01
  • 2023-03-31
  • 2017-03-03
  • 1970-01-01
  • 2012-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多