繁体   English   中英

我有查询将值插入数组和for循环的MySQL数据库中

[英]i have query that inserting values into MySQL database with array and for loop

我查询将值插入到MySQL数据库中并使用array和loop。但是当我提交表格MySQL数据库时显示两次输入。 第一记录为空,第二记录为值? 为什么MySQL数据库显示First Record Empty Entry.i不知道其背后的原因是什么?

这里我的功能代码

<?php 
if(isset($_REQUEST['order'])) 
{
$count=1;
$count++;   
$total=$_POST['total']; 
for ($i=1; $i<=$count; $i++){
$queryproduct=mysql_query("INSERT INTO shoppingcart VALUES    ('','','','$uid','$email','".$_POST['product'][$i]."','".$_POST['userfile_name'] [$i]."','".$_POST['price'][$i]."','".$_POST['qty'][$i]."','".$_POST['amt'][$i]."','$total')") or die("Order  Query Problem");    
}
}
?>

尝试从0开始循环,因为$ _POST [“ pid”]变量从0开始编号,如第二(工作)示例所示:

for($i=0; $i<$lenght; $i++){ ...

但是,请避免像Matt Ball在其评论中所述使用mysql_ *函数。

首先,我将忽略此代码的安全性问题,稍后我们将回到该部分。 让我们首先解决我认为正确的问题。

第一记录为空,第二记录为值? 为什么MySQL数据库显示First Record Empty Entry.i不知道其背后的原因是什么?

$count=1;
$count++;

这里发生了什么? 你设置$count等于1 ,然后你立刻一个太递增它2在第二行。 你为什么要这么做? 为什么不首先将其设置为两个呢?

我敢打赌,您对“第一个记录为空”的问题从这些代码行开始。

$total = $_POST['total'];

这仅在查询中使用一次,因此为什么要浪费内存将其分配给另一个变量。

在您的代码的第一个示例中,我想说这将是您可以从中获得的最佳执行效果(再次,不是在谈论安全性)。

<?php 
if(isset($_REQUEST['order'])) 
{
    for ($i = 1, $count = 0; $i <= $count; ++$i)
    {
        $queryproduct = mysql_query
        (
            "INSERT INTO shoppingcart VALUES
            (
                '',
                '',
                '',
                '$uid',
                '$email',
                '{$_POST['product'][$i]}',
                '{$_POST['userfile_name'][$i]}',
                '{$_POST['price'][$i]}',
                '{$_POST['qty'][$i]}',
                '{$_POST['amt'][$i]}',
                '{$_POST['total']}'
            );"
        )
        or die("Order Query Problem");
    }
}
?>

查看第二组代码,这可能是您可以做的最好的事情。

<?php
    if(isset($_REQUEST['order']))
    {
        for($i = 0, $p = count($_POST['product']); $i < $p; ++$i)
        {
            $queryproduct = mysql_query
            (
                "INSERT INTO shoppingcart VALUES
                (
                    '',
                    '',
                    '{$_POST['pid'][$i]}',
                    '$uid',
                    '$email',
                    '{$_POST['product'][$i]}',
                    '{$_POST['userfile_name'][$i]}',
                    '{$_POST['price'][$i]}',
                    '{$_POST['qty'][$i]}',
                    '{$_POST['amt'][$i]}',
                    '{$_POST['total']}'
                );"
            )
            or die("Order Query Problem");
        }
    }
?>

最后,这是关于安全性的。 如果我们使用PHP代码库中的一些未弃用的函数,则可以使这些语句安全。

PDO是这些接口中最常见的接口,您可以找到建立与SQL数据库的PDO连接所需的所有文档

<?php
    if(isset($_REQUEST['order']))
    {
        $stmt = $dbh->prepare("INSERT INTO shoppingcart VALUES ('', '', ?, ?, ?, ?, ?, ?, ?, ?, ?);");

        $stmt->bindParam(1, $pid);

        $stmt->bindParam(2, $uid);
        $stmt->bindParam(3, $email);

        $stmt->bindParam(4, $product);
        $stmt->bindParam(5, $name);
        $stmt->bindParam(6, $price);
        $stmt->bindParam(7, $qty);
        $stmt->bindParam(8, $amt);

        $stmt->bindParam(9, $total);

        for($i = 0, $p = count($_POST['product']); $i < $p; ++$i)
        {
            $pid = $_POST['pid'][$i]);

            $product = $_POST['product'][$i]);
            $name = $_POST['userfile_name'][$i]);
            $price = $_POST['price'][$i]);
            $qty = $_POST['qty'][$i]);
            $amt = $_POST['amt'][$i]);

            $total = $_POST['total'];
        }

        $stmt->execute();
    }
?>

这些将为您正确转义查询语句。 当我们所有人都不了解每个攻击媒介时,这是一个巨大的帮助,而专家们已经提出了有关如何解决最常见的攻击的代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM