【发布时间】:2019-02-11 19:03:57
【问题描述】:
我正在开发一个使用 php 制作的 API 的 android 应用程序。在这里,我正在动态创建列及其值。
我正在通过邮递员验证 API,每次都会发生奇怪的事情,在循环 Json 对象时,我正在做的是首先创建列,然后插入其值。 问题是只有第一次迭代保存元素,其余的只创建列但不插入值。不知道是不是我做错了,下面是我的php代码。
<?php
include("connection.php");
$data = file_get_contents('php://input');
$json_data = json_decode($data);
foreach($json_data as $key => $val) {
$column_name = $key ;
$c_column_name = preg_replace('/[^a-zA-Z]+/', '', $column_name);
$column_value = $val ;
$table_name = "test2";
$email = "ht@t.com";
$result = mysqli_query($conn,"SHOW COLUMNS FROM $table_name LIKE '$c_column_name'");
$exists = (mysqli_num_rows($result))?TRUE:FALSE;
if($exists) {
$query1 = "INSERT INTO $table_name($c_column_name)VALUES('$column_value') ";
$data0=mysqli_query($conn,$query);
if($data0)
{
echo json_encode(array("success"=>"true - insertion","message"=>"Column existed, Successfully data sent."));
}
else{
echo json_encode(array("success"=>"false - insertion","message"=>"Column existed, data not inserted."));
}
}
else{
$query2="ALTER TABLE $table_name ADD COLUMN `$c_column_name` varchar(50) NOT NULL";
$data1=mysqli_query($conn,$query2);
if($data1){
$query3="INSERT INTO $table_name($c_column_name)VALUES('$column_value')";
$data2=mysqli_query($conn,$query3);
if($data2)
{
echo json_encode(array("success"=>"true - insertion","message"=>"Successfully data sent."));
}
else{
echo json_encode(array("success"=>"false - insertion","message"=>"Column created but data not inserted."));
}
}
else
{
echo json_encode(array("success"=>"false - column creation","message"=>"Failed to create column.'$column_name', '$table_name', '$conn'"));
}
}
}
?>
这里是通过邮递员的 Json 对象。
{"Shape":"rewq","Trans.No.":"yuuiop","Color":"qwert"}
请帮助我,非常感谢任何帮助或建议。
【问题讨论】:
-
这听起来对我来说更适合面向文档的数据库。
-
好吧我明白了,我们不能在 sql 中这样做吗?我们能想到
-
$json_data = json_decode($data, true); -
当然。尽管这取决于您要达到的目标。数据库模式的运行时操作不是我通常推荐的路径。取决于数据库版本的另一个选项是简单地存储数据 as json。或者使用 id 表将它们绑定在一起的简单键值表是另一种选择。
-
我尝试将其转换为数组,但并没有太大帮助,我认为在我设置(true)@Anuga 后,我的逻辑需要在下面进行更多更改