【问题标题】:Insert an Array into Database using PHP使用 PHP 将数组插入数据库
【发布时间】:2023-03-05 06:58:01
【问题描述】:

我尝试了很多方法通过 localhost 将我的数组插入到我的 PHPmyAdmin 数据库中。到目前为止,没有一个工作过。我相信我可能将太多不同的解决方案混合在一起。我可能试图错误地插入 INT。

我的解决方案基于此参考:https://www.phpflow.com/php/insert-php-array-into-mysql-table/

$result = array( "0" => array(1, "blah", "blah", "blah", "blah", 2, 3),
                 "1" => array(2, "blah", "blah", "blah", "blah", 4, 5));

$connect = mysqli_connect("localhost", "root", "", "test");
if(is_array($result)){
foreach ($result as $row) {  
    $fieldVal0 = (int) $result[$row][0];
    $fieldVal1 = mysql_real_escape_string($result[$row][1]);
    $fieldVal2 = mysql_real_escape_string($result[$row][2]);
    $fieldVal3 = mysql_real_escape_string($result[$row][3]);
    $fieldVal4 = mysql_real_escape_string($result[$row][4]);
    $fieldVal5 = (int) $result[$row][5];
    $fieldVal6 = (int) $result[$row][6];

    $query ="INSERT INTO testtable ( id, english, navajoVerb, person, mode, verbNum, bookNum) VALUES ( '". $fieldVal0."','".$fieldVal1."','".$fieldVal2."','". $fieldVal3."','".$fieldVal4."','".$fieldVal5."','".$fieldVal6."' )";

    mysqli_query($connect,$query);  
}
}

image of my database structure

【问题讨论】:

  • 对于初学者来说,您使用了错误的功能。 mysqli_query,您缺少“i”。
  • second $row 不是这里的索引,它是实际的行/数组。所以:$fieldVal0 = (int) $row[0];(等等..)
  • 第三:使用准备好的语句!它更省钱,您可以摆脱所有 $fieldVals - 至少为您节省 4 行容易出错的行。
  • 第四:查看mysqli::error 看看出了什么问题
  • 在我的例子中我应该把错误代码放在哪里?

标签: php mysql arrays database


【解决方案1】:

我相信自 php 5.5.x 以来 mysqli 已被贬低, 无论如何,我建议在使用数据库和 PHP 时使用PDO。 它也使您的数据转义变得更加容易。

1: if 语句中的 $records 来自哪里? 因为如果不是,它永远不会超过那个。

2:您将数值声明为嵌套数组中的字符串 不确定类型转换是否是最佳解决方案。你可以只使用整数。

array(1, "blah" ....

这可能有效:

 $result = array( "0" => array(1, "blah", "blah", "blah", "blah", 2, 3),
                 "1" => array(2, "blah", "blah", "blah", "blah", 4, 5));

$connect = mysqli_connect("localhost", "root", "", "test");

if(is_array($result))
{


    // First array ( 0 and 1) 
    foreach ($result as $key =>$row) 
    {
        // We can just loop over the next array so we have to type less
        // lets declare a new array with escaped results

        $escaped_results = array();

        // Now loop over the row
        foreach( $row as $key => $value)
        {
            // if we don't set anything inbetween the brackets [] we tell php to auto fill the array 
            // so it adds a new array element starting from 0 
            $escaped_results[] = mysqli_real_escape_string($connect, $value);
        }

        // lets make the query easier and simpler
        // we just use implode to build the values 
        $query ="INSERT INTO testtable ( id, english, navajoVerb, person, mode, verbNum, bookNum) VALUES ('". implode("','", $escaped_results) ."')";

        // execute the query
        $result = mysqli_query($connect, $query);  

        // catch the error
        if (!$result) {
            die('Invalid query: ' . mysqli_error($connect));
        }
    }
}

虽然我会推荐一些关于 php 的 PDO 教程 因为这会让你的生活更轻松。

【讨论】:

  • 谢谢,对不起,我在问题中复制了一些错误的项目。我已经在问题中更正了它们,并坚持了你的回答,但仍然没有任何东西插入到数据库中。
  • 好的,您在运行脚本时遇到任何错误?并且您还确定您正在运行 sql server?
  • 是的,我确定我已连接,因为我在本地主机上使用另一个数据库做其他事情,并且我与它通信良好..
  • 我更改了代码,因此您可能需要重试。同时我看看我能不能帮你一点:)
  • 好吧,我一直在看它,似乎 PHP 7.0.0 及更高版本完全删除了函数 mysql_real_escape_string 只能说它不值得学习 mysqli,所以请开始研究 PDO。那就是说我仍然会帮你解决这个问题。
【解决方案2】:

在您的 foreach 中 $row 是您的数组,而不是键(“0”、“1”),您只需更改代码以使用 $row[0],如下所示:

foreach ($result as $row) {  
    $fieldVal0 = (int) $row[0];
    $fieldVal1 = mysql_real_escape_string($row[1]);
    $fieldVal2 = mysql_real_escape_string($row[2]);
    $fieldVal3 = mysql_real_escape_string($row[3]);
    $fieldVal4 = mysql_real_escape_string($row[4]);
    $fieldVal5 = (int) $row[5];
    $fieldVal6 = (int) $row[6];
}

【讨论】:

  • 仍然没有任何东西插入数据库=/
  • 它打印一些错误吗?如果您打印查询就可以了吗?
  • 没有错误。我将 print $query 放在声明它的行之后,但没有任何反应。
  • 您是否启用了display_errors?您可以将此代码放在 php ini_set('display_errors', 1); error_reporting(E_ALL); 的开头
猜你喜欢
  • 2017-10-03
  • 2012-04-20
  • 2013-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多