将数组插入MySQL DB(意外的T_STRING)

时间:2012-03-20 17:46:22

标签: php mysql arrays

我正在尝试将数组中的值添加到数据库中,尝试了很多不同的示例,但仍然没有运气。通过其他方式,我可以只插入数据库的最后一个数组值..任何帮助将不胜感激。

$max=count($_SESSION['cart']);
for($i=0;$i<$max;$i++){
$pid=$_SESSION['cart'][$i]['productid'];
$ppid=get_product_id($pid);
$ppav=get_product_name($pid);
$price=get_price($pid);
$date=date('Y-m-d');
$orderid=mysql_insert_id();
$customerid=mysql_insert_id();

$array['cust_id'] = $customerid;
$array['prod_id'] = $ppid;
$array['prod_name'] = $ppav;
$array['price'] = $price;
$array['date'] = $date;

$sql1 = array(); 
foreach( $array as $row ) {
$sql1[] = '('null', '.$row['cust_id'].', '.$row['prod_id'].', '.$row['prod_name']', '.$row['price'].', '.$row['date'].')';
                                    }
mysql_query('INSERT INTO orders (id, cust_id, prod_id, prod_name, price, date) VALUES '.implode(',', $sql1));


}

3 个答案:

答案 0 :(得分:1)

$sql1[] = '('null', '.$row['cust_id'].', '.$row['prod_id'].', '.$row['prod_name']', '.$row['price'].', '.$row['date'].')';

应该是

$sql1[] = "(null, '" . $row['cust_id'] . "', '" . etc....

您生成错误的PHP字符串,导致语法错误。请注意,此代码易受SQL注入攻击。尽管这些数据最初似乎来自数据库,但你仍然可以注入自己。

答案 1 :(得分:0)

$ sql1语句中不需要'for null:

尝试:

$sql1[] = '(null, '.$row['cust_id'] ...

答案 2 :(得分:0)

正如Daniel A. White指出的那样,您的代码非常容易受到SQL注入的影响,但这是您提供的代码的工作版本:

<?php

$max = count($_SESSION['cart']);
for($i = 0; $i < $max; $i++) {
    $pid = $_SESSION['cart'][$i]['productid'];
    $ppid = get_product_id($pid);
    $ppav = get_product_name($pid);
    $price = get_price($pid);
    $date = date('Y-m-d');
    $orderid = mysql_insert_id();
    $customerid = mysql_insert_id();

    $array['cust_id'] = $customerid;
    $array['prod_id'] = $ppid;
    $array['prod_name'] = $ppav;
    $array['price'] = $price;
    $array['date'] = $date;

    $sql1 = array();
    foreach($array as $row) {
        $sql1[] = '(NULL, '.$row['cust_id'].', '.$row['prod_id'].', "'.$row['prod_name'].'", ' . $row['price'] . ', "' . $row['date'] . '")';
    }
    mysql_query('INSERT INTO orders (id, cust_id, prod_id, prod_name, price, date) VALUES ' . implode(',',$sql1));

}
?>

另外,我建议使用一个不错的代码编辑器(我使用Zend Studio这是免费 Eclipse PDT的更好版本)或至少有一个错误突出显示以防止这样的常见错误。