如何在 PHP 中获取 JSON 数组并打印其值?
Posted
技术标签:
【中文标题】如何在 PHP 中获取 JSON 数组并打印其值?【英文标题】:How to get JSON array in PHP and print its value? 【发布时间】:2017-10-20 09:49:46 【问题描述】:实际上我已经创建了一个包含表行值的数组,我想使用 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 语句中遇到错误: 为每个提供的参数无效
我搜索了一下,才知道接收值不是数组。 怎么解决???
【问题讨论】:
您应该使用json_decode($data)
而不是json_encode($data)
。
你应该使用$data = json_decode($_GET['data']);
$data = json_decode($_GET['data'],true);
变量个数和字符串类型的长度必须与语句中的参数相匹配。
嗨,该错误现已解决,但我收到更多错误,因为 mysqli_stmt_bind_param 预计参数 1 为 mysqli_stmt,字符串
【参考方案1】:
只是做
$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_param 请使用以下类型
i 对应变量的类型为整数
d 对应变量的类型为 double
对应的变量是字符串类型
b 对应的变量是一个 blob,会以数据包的形式发送
更多参考请查看http://php.net/manual/en/mysqli-stmt.bind-param.php
【讨论】:
嗨,试过了,但错误的性质与 mysqli_stmt_bind_param 期望参数 1 为 mysqli_stmt, 字符串相同 嘿 J Salaria,我认为您没有添加正确的类型,请检查更新 1 个答案 你是对的,我已经浏览了链接并更新了我的代码,但仍然遇到同样的错误 好的echo $_GET['data'];
让我知道输出是什么
作为,我正在添加... TEA,OFFICE,1, 3, 20/MAY/2017-14:46, EVENING, 3 我得到 [["TEA","OFFICE ","1","3","20/MAY/2017-14:46","晚上","3"]]【参考方案2】:
使用json_decode()设置第二个参数true当为TRUE时,返回的对象会被转换成关联数组。
$data = json_decode($_GET['data'],true);
注意:阅读文档你的代码有很多错误prepared statement
1) 变量的数量和字符串类型的长度必须与语句中的参数相匹配。您为每个变量添加了双 ss。
mysqli_stmt_bind_param('s', $row['Purpose']); //remove one s because your binding one variable only
2) 将 variables 绑定到准备好的语句,作为不接受 string
的参数$tea ='TEA';
mysqli_stmt_bind_param('s', $tea);
变量应该通过引用传递给绑定参数。不接受字符串。
3) mysqli_stmt_bind_param 第一个参数是 $stmt 。你错过了。添加它。
4) (?) 问号的数量与数字绑定变量匹配,否则会出错。
5)
i corresponding variable has type integer
d corresponding variable has type double
s corresponding variable has type string
b corresponding variable is a blob and will be sent in packets
更新 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);
【讨论】:
嗨,我试过了,但没有成功,错误的性质仍然与 mysqli_stmt_bind_param 期望参数 1 为 mysqli_stmt, 字符串相同 是的,错过了通过声明。在我的更新 1 @JSalaria 中检查我的更新答案 我也试过了,但我得到了 mysqli_stmt_bind_param() 的错误:变量数与准备语句中的参数数不匹配 (?) 个问号与数字变量匹配,否则会出现此错误。检查你的陈述【参考方案3】:将 json 转换为数组。使用下面的代码
$datajson = $_GET['data'];
$dataarray = json_decode($datajson, true);
【讨论】:
以上是关于如何在 PHP 中获取 JSON 数组并打印其值?的主要内容,如果未能解决你的问题,请参考以下文章