将 JavaScript 数组数据插入 MySQL 数据库的问题

Posted

技术标签:

【中文标题】将 JavaScript 数组数据插入 MySQL 数据库的问题【英文标题】:Issue on Inserting JavaScript Array Data into MySQL Database 【发布时间】:2016-02-05 22:47:26 【问题描述】:

您能否看一下下面的 sn-ps,让我知道为什么我无法将数组值插入数据库。在 Js 文件中我有:

 <script>
        var arr = ["foo", "2015/11/04", "Jill", "Smith", "60"];
        var serializedArr = JSON.stringify( arr );
      $("#loader").on("click", function()
        var upload = $.ajax(
                            type: "POST",
                            url: "loader.php",
                            data: array:serializedArr,
                            cache: false,
                            beforeSend: function() 
                            
        );
);

在 PHP 文件中

<?php
   define ( 'DB_HOST', 'localhost' );
   define ( 'DB_USER', 'root' );
   define ( 'DB_PASSWORD', '' );
   define ( 'DB_NAME', 'dbapp' );

 //$array = json_decode($_POST['array']);
$array = $_POST['array'];
//Open a new connection to the mysql server
$mysqli = new mysqli('DB_HOST','DB_USER','DB_PASSWORD','DB_NAME');

$arr_one =   $mysqli->real_escape_string($array[0]);
$arr_two =   $mysqli->real_escape_string($array[1]);
$arr_three = $mysqli->real_escape_string($array[2]);
$arr_four =  $mysqli->real_escape_string($array[3]);
$arr_five =  $mysqli->real_escape_string($array[4]);

if ($mysqli->connect_error) 
    die('Error : ('. $mysqli->connect_errno .') '. $mysqli->connect_error);


//MySqli Insert Query
$insert_row = $mysqli->query("INSERT INTO `models` (name, date, nip, tip, age) VALUES($arr_one, $arr_two, $arr_three, $arr_four, $arr_five)");

if($insert_row)
    print 'Success! ID of last inserted record is : ' .$mysqli->insert_id .'<br />'; 
else
    die('Error : ('. $mysqli->errno .') '. $mysqli->error);

// close connection 
$mysqli->close();
?>

我都试过了

$array = json_decode($_POST['array']);

$array = $_POST['array']; 

但我无法加载数据,甚至页面上没有错误消息?!

【问题讨论】:

我希望$mysqli = new mysqli('DB_HOST','DB_USER','DB_PASSWORD','DB_NAME'); 失败 @hjpotter92,谢谢,但你是什么意思? 发出 ajax 请求时,您是否在控制台中看到任何内容?正如@hjpotter92 所说,对 mysqli 的调用使用字符串而不是之前定义的常量 不,控制台中什么都没有! 当您处理请求时,$_POST['array'] 中究竟是什么? 【参考方案1】:
    建立连接时使用定义的常量而不是字符串。 使用准备好的语句而不是在查询中传递变量。 如the other answer 中所述,您正在尝试访问字符串变量的索引(因为发送的数据是 JSON 字符串)。 在 ajax 调用中使用 successerror 句柄,将结果/错误输出到控制台。

因此,您需要先json_decode 接收到的数据,然后再对其进行处理。


$array = json_decode( $_POST['array'] );
$mysqli = new mysqli( DB_HOST, DB_USER, DB_PASSWORD, DB_NAME );

$insert_row_stmt = $mysqli->prepare( "INSERT INTO `models` (name, date, nip, tip, age) VALUES(?, ?, ?, ?, ?)");
$insert_row_stmt->bind_param( 'ssssi', 
    $array[0],
    $array[1],
    $array[2],
    $array[3],
    $array[4]
);
$insert_row = $insert_row_stmt->execute();

var upload = $.ajax(
    type: "POST",
    url: "loader.php",
    data: array:serializedArr,
    cache: false,
    success: function(d) 
        console.log(d);
    
);

【讨论】:

感谢 hjpotter92 这正在工作,但这里有一个问题!代码为name 插入0,它必须是foo,但其他都是正确的 @Behseini 输入var_dump($array); 并检查你得到的结果。 但我正在发布数据!那么我该如何使用var_dump($array); 通过将console.log 放入您的$.ajax 调用的成功处理程序中。 我真的很喜欢学习这个调试!所以console.log什么?【参考方案2】:

问题是您在通过 AJAX 请求发送数组之前对数组进行 JSON.stringify 处理。这意味着 array = "["foo", "2015/11/04", "Jill", "Smith", "60"]",这在技术上不是一个有效的 JSON 对象。

尝试将数组包装在 js 对象中,然后将其字符串化。比如

var arr = data: ["foo", "2015/11/04", "Jill", "Smith", "60"] ;

那就试试

$array = json_decode($_POST['array']).data;

【讨论】:

感谢 Christooher,但我在这里感到困惑!那么data: array:serializedArr, 怎么样?【参考方案3】:
<div id="loader"></div>
<script src="jquery.min.js"></script>
<script>
    var arr = ["foo", "2015/11/04", "Jill", "Smith", "60"];
    $("#loader").load('load.php',arr:arr);
</script>

加载.php:

 <?php
       $arr = $_POST['arr'];
       $insert_row = $mysqli->query("INSERT INTO `models` (name, date, nip, tip, age)
                      VALUES($arr[1], $arr[2], $arr[3], $arr[4], $arr[5])");
    ?>

您可以在数据库中添加这样的值。

【讨论】:

以上是关于将 JavaScript 数组数据插入 MySQL 数据库的问题的主要内容,如果未能解决你的问题,请参考以下文章

Javascript(NodeJs) - 将数组和对象转换为 mysql 中的批量插入(Sequelize)

对象值的Javascript数组转换为多维数组

Javascript:将数组中的数据插入函数参数

PHP:将数组数据插入 MySQL 数据库

如何将json数组插入mysql数据库

将 JavaScript 中的值直接插入 MySQL 数据库