【问题标题】:mysql insert Notice: Array to string conversionmysql insert 注意:数组到字符串的转换
【发布时间】:2013-07-16 02:19:19
【问题描述】:
$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 不对。但我没有任何想法插入它。关于如何做到这一点的任何想法?

【问题讨论】:

  • echo 您的查询以查看替换变量的确切原始 mysql 查询。
  • 你的表单是什么样子的
  • 有3种形式的材料,数量,成本。他们每个人都乘了 5 倍。
  • 一个建议(可能您正在关注它):请在插入数据库之前清理并验证您的输入
  • 尝试将$_POST[material][$i]更改为$_POST['materials'][$i]

标签: php mysql


【解决方案1】:

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

【讨论】:

  • 我应该把它放在哪里?抱歉,我是 php 新手
【解决方案2】:
$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 了解数据类型等。

【讨论】:

    【解决方案3】:

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

    $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 的重大安全漏洞。如果这是更严重的工作,您应该参考链接并修复安全漏洞。

    【讨论】:

    • 如果我使用花括号,我会收到另一个通知Notice: Use of undefined constant
    • @moogiienhtsogt 您的原始代码中还有另一个错误。在编辑后的答案中指出了这一点。
    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 2017-08-11
    • 2013-04-18
    • 1970-01-01
    • 2013-11-03
    • 1970-01-01
    • 2016-08-29
    相关资源
    最近更新 更多