如何在PHP中获取JSON数组并打印其值?

如何在PHP中获取JSON数组并打印其值?,php,jquery,mysql,arrays,json,Php,Jquery,Mysql,Arrays,Json,实际上,我已经创建了一个包含表行值的数组,我想使用jQuery将该数组传递给PHP文件,并将其存储在MySql数据库中 我所做的工作如下: var myTableArray = []; $("table#tbl-nitem tr").each(function() { var arrayOfThisRow = []; var tableData = $(this).find('td'); if (tableData.length > 0) { ta

实际上,我已经创建了一个包含表行值的数组,我想使用jQuery将该数组传递给PHP文件,并将其存储在MySql数据库中

我所做的工作如下:

var myTableArray = [];

$("table#tbl-nitem tr").each(function() {
    var arrayOfThisRow = [];
    var tableData = $(this).find('td');
    if (tableData.length > 0) {
        tableData.each(function() {
            arrayOfThisRow.push($(this).text());
        });

        alert(arrayOfThisRow);
        arrayOfThisRow.shift();
        myTableArray.push(arrayOfThisRow);
    }
});
//myTableArray.shift();
alert(myTableArray);

var jsonString = JSON.stringify(myTableArray);
$.ajax({
    type: "GET",
    url: "script_expenses.php",
    data: {
        data: jsonString
    },
    cache: false,

    success: function(response) {
        if (response == "ok") {
            alert("OK");
        } else {
            alert(response);
        }
    }
});
上面的代码将创建、存储数组并将其传递到.php文件

$conn = require_once 'db_connection.php';
//echo $conn;
session_start();
$data = $_GET['data'];
json_encode($data);

//  $sql = "INSERT INTO my_table ( fname, lname ) VALUES ( ?,? )"; 
//$ins = 

$sql = "INSERT INTO expenses_list VALUES (?, ?, ?, ?, ?, ?)";
$stmt = mysqli_prepare($conn, $sql);

foreach($data as $row) {
    mysqli_stmt_bind_param('ss', 'TEA');
    mysqli_stmt_bind_param('ss', $row['Purpose']);
    mysqli_stmt_bind_param('ss', $row['UnitPrice']);
    mysqli_stmt_bind_param('ss', $row['Qty']);
    mysqli_stmt_bind_param('ss', $row['DTime']);
    mysqli_stmt_bind_param('ss', $row['Description']);
    $result = mysqli_stmt_execute($stmt);
}

flush();
上面的代码将接收数组并尝试存储在数据库中。 但我在foreach语句中得到一个错误,如下所示: 为每个人提供的参数无效

我搜索并了解到接收值不是数组。 如何解决这个问题?

就这么办吧

$data = $_GET['data'];

$data = json_decode($data,true);
现在可以在foreach循环中使用$data 更新1

$conn =  require_once'db_connection.php';
session_start();
$data = $_GET['data'];
$data = json_decode($data,true);

$sql    = "INSERT INTO expenses_list VALUES (?, ?, ?, ?, ?, ?)";
$stmt   = mysqli_prepare($conn,$sql);

foreach($data as $row){
    mysqli_stmt_bind_param('s', 'TEA');
    mysqli_stmt_bind_param('s', $row['Purpose']);

    //mysqli_stmt_bind_param('s', $row['UnitPrice']);
    //if UnitPrice is double values then use
    mysqli_stmt_bind_param('d', $row['UnitPrice']);

    //mysqli_stmt_bind_param('s', $row['Qty']);
    //if Qty is integer then use
    mysqli_stmt_bind_param('i', $row['Qty']);
    mysqli_stmt_bind_param('s', $row['DTime']);
    mysqli_stmt_bind_param('s', $row['Description']);
    $result = mysqli_stmt_execute($stmt);
}
在mysqli_stmt_bind_参数中,请使用以下类型

i对应变量的类型为integer

d对应变量的类型为double

s对应的变量具有类型字符串

b对应的变量是blob,将以数据包的形式发送

有关更多参考信息,请检查此项

$data = $_GET['data'];

$data = json_decode($data,true);
现在可以在foreach循环中使用$data 更新1

$conn =  require_once'db_connection.php';
session_start();
$data = $_GET['data'];
$data = json_decode($data,true);

$sql    = "INSERT INTO expenses_list VALUES (?, ?, ?, ?, ?, ?)";
$stmt   = mysqli_prepare($conn,$sql);

foreach($data as $row){
    mysqli_stmt_bind_param('s', 'TEA');
    mysqli_stmt_bind_param('s', $row['Purpose']);

    //mysqli_stmt_bind_param('s', $row['UnitPrice']);
    //if UnitPrice is double values then use
    mysqli_stmt_bind_param('d', $row['UnitPrice']);

    //mysqli_stmt_bind_param('s', $row['Qty']);
    //if Qty is integer then use
    mysqli_stmt_bind_param('i', $row['Qty']);
    mysqli_stmt_bind_param('s', $row['DTime']);
    mysqli_stmt_bind_param('s', $row['Description']);
    $result = mysqli_stmt_execute($stmt);
}
在mysqli_stmt_bind_参数中,请使用以下类型

i对应变量的类型为integer

d对应变量的类型为double

s对应的变量具有类型字符串

b对应的变量是blob,将以数据包的形式发送

有关更多参考信息,请检查此

使用json\u decode()设置第二个参数true如果为true,返回的对象将转换为关联数组

$data = json_decode($_GET['data'],true);
注意:阅读文档您的代码有很多错误


1) 变量的数量和字符串类型的长度必须与语句中的参数匹配。您为每个变量设置doubless

mysqli_stmt_bind_param('s', $row['Purpose']); //remove one s because your binding one variable only 
2) 将变量绑定到准备好的语句,作为参数不接受字符串

$tea='tea';
mysqli_stmt_bind_param('s',$tea)

变量应通过引用传递给绑定参数。不接受字符串

3) mysqli_stmt_bind_参数的第一个参数是$stmt。你错过了。加上它

4) (?)问号的数量与数字绑定变量匹配,否则将给出错误

(五)

更新1:

        $tea ='TEA';
    foreach($data as $row){
        mysqli_stmt_bind_param($stmt,'s', $tea); // s denotes   corresponding variable has type string
        mysqli_stmt_bind_param($stmt,'s', $row['Purpose']);
        mysqli_stmt_bind_param($stmt,'s', $row['UnitPrice']);
        mysqli_stmt_bind_param($stmt,'s', $row['Qty']);
        mysqli_stmt_bind_param($stmt,'s', $row['DTime']);
        mysqli_stmt_bind_param($stmt,'s', $row['Description']);
        $result = mysqli_stmt_execute($stmt);
    }
使用json_decode()设置第二个参数true如果为true,返回的对象将转换为关联数组

$data = json_decode($_GET['data'],true);
注意:阅读文档您的代码有很多错误


1) 变量的数量和字符串类型的长度必须与语句中的参数匹配。您为每个变量设置doubless

mysqli_stmt_bind_param('s', $row['Purpose']); //remove one s because your binding one variable only 
2) 将变量绑定到准备好的语句,作为参数不接受字符串

$tea='tea';
mysqli_stmt_bind_param('s',$tea)

变量应通过引用传递给绑定参数。不接受字符串

3) mysqli_stmt_bind_参数的第一个参数是$stmt。你错过了。加上它

4) (?)问号的数量与数字绑定变量匹配,否则将给出错误

(五)

更新1:

        $tea ='TEA';
    foreach($data as $row){
        mysqli_stmt_bind_param($stmt,'s', $tea); // s denotes   corresponding variable has type string
        mysqli_stmt_bind_param($stmt,'s', $row['Purpose']);
        mysqli_stmt_bind_param($stmt,'s', $row['UnitPrice']);
        mysqli_stmt_bind_param($stmt,'s', $row['Qty']);
        mysqli_stmt_bind_param($stmt,'s', $row['DTime']);
        mysqli_stmt_bind_param($stmt,'s', $row['Description']);
        $result = mysqli_stmt_execute($stmt);
    }

将json转换为数组。使用下面的代码

$datajson = $_GET['data'];
$dataarray = json_decode($datajson, true);

将json转换为数组。使用下面的代码

$datajson = $_GET['data'];
$dataarray = json_decode($datajson, true);


您应该使用而不是
json\u encode($data)
。您应该使用
$data=json\u decode($\u GET['data'])
$data=json\u decode($\u GET['data'],true);变量的数量和字符串类型的长度必须与语句中的参数相匹配。您好,这个错误现在已经解决了,但是我得到了更多的错误,因为mysqli_stmt_bind_param希望paramater 1是mysqli_stmt,您应该使用string而不是
json_encode($data)
。您应该使用
$data=json_decode($\u GET['data'])
$data=json\u decode($\u GET['data'],true);变量的数量和字符串类型的长度必须与语句中的参数匹配。hi,该错误现在已解决,但由于mysqli_stmt_bind_param希望paramater 1为mysqli_stmt,stringHi,我已尝试但未成功,尽管如此,错误的性质与mysqli_stmt_bind_param期望paramater 1为mysqli_stmt相同,stringyes错过传递语句。在我的更新1@JSalariaI中检查我的更新答案我也尝试过,但我得到了错误,因为mysqli_stmt_bind_param():变量的数量与准备语句中的参数数量不匹配(?)的数量问号与数字变量匹配,否则它将给出此错误。check you statement嗨,我已经尝试过了,但是没有成功,错误的性质仍然与mysqli_stmt_bind_param期望paramater 1为mysqli_stmt一样,stringyes错过了通过该语句。在我的更新1@JSalariaI中检查我的更新答案我也尝试过,但我得到了错误,因为mysqli_stmt_bind_param():变量的数量与准备语句中的参数数量不匹配(?)的数量问号与数字变量匹配,否则它将给出此错误。检查您的声明Hi,尝试过,但错误的性质与mysqli_stmt_bind_param期望参数1为mysqli_stmt,stringHey J Salaria,我认为您添加的类型不正确,请检查更新1答案您是对的,我已经通过链接更新了我的代码,但仍然得到相同的错误OK
echo$\u GET['data'并让我知道输出是什么,我正在添加。。。TEA,OFFICE,1,3,20/MAY/2017-14:46,傍晚,3和我得到[[“TEA”,“OFFICE”,“1”,“3”,“20/MAY/2017-14:46”,“傍晚”,“3”]]嗨,尝试过,但错误的性质与mysqli_stmt_bind_param期望paramater 1是mysqli_stmt,stringHey J Salaria,我认为您添加的类型不正确,请检查更新1答案您是正确的,我已经浏览了链接并更新了代码,但仍然收到相同的错误OK
echo$\u GET['data']并让我知道输出是什么,我正在添加。。。茶,办公室,2017年5月1日,3日,20日-14:46,晚上,3点,我要起床了