mysql insert注意:数组到字符串的转换

时间:2013-07-16 02:19:19

标签: php mysql

$count = count(array_filter($_POST["materials"]));  
for($I = 0; $I < $count; $i++)  
{ 
    $insert = mysqli_query($con, "INSERT INTO table1 (uid, materials, num, cost)
            VALUES
            (
            '$_POST[uid]',
            '$_POST[material][$i]',
            '$_POST[num][$i]',
            '$_POST[cost][$i]',
            )");        
}

如果我使用echo $_post[materials][$i]它会给我正确的结果,但在数据库中它会插入类似array[0]的内容。

似乎我的$insert不对。但我不知道插入它。关于如何做的任何想法?

3 个答案:

答案 0 :(得分:0)

数组到字符串:implode(',', $_POST[material][$i])

答案 1 :(得分:0)

$sql_template = "INSERT INTO table1 (uid, materials, num, cost)
        VALUES(%d, %s, %s, %s)")";

$insert = mysqli_query($con, "INSERT INTO table1 (uid, materials, num, cost) = 
sprintf($sql_template, $_POST[uid], $_POST[material][$i], $_POST[num][$i], $_POST[cost][$i]);

mysqli_query($con,$insert);

对于sprintf更多详细信息,请访问this link了解数据类型等。

答案 2 :(得分:-1)

您可以(并且必须)在表达式周围使用一对花括号,并引用数组键:

$insert = mysqli_query($con, "INSERT INTO table1 (uid, materials, num, cost)
            VALUES
            (
            '{$_POST['uid']}',
            '{$_POST['material'][$i]}',
            '{$_POST['num'][$i]}',
            '{$_POST['cost'][$i]}',
            )");

请参阅php.net > Strings

这是因为PHP在字符串中的变量解析仅限于单维数组。对于两个或更多维度,您需要使用花括号来表示PHP变量的结尾。同样适用于使用字符串键访问数组。

您还需要引用字符串数组键,因为它们是实际的字符串,您应该始终正确引用它们


另请注意,如果代码不是生产代码,则代码很好。但是,您应该知道您的代码会打开一个名为SQL Injection的大型安全漏洞。如果这是更严肃的工作,您应该参考该链接并修复安全漏洞。