Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 有了这段代码,我如何从MySql表中删除不在我发布的JSON数组中的记录?_Php_Mysql - Fatal编程技术网

Php 有了这段代码,我如何从MySql表中删除不在我发布的JSON数组中的记录?

Php 有了这段代码,我如何从MySql表中删除不在我发布的JSON数组中的记录?,php,mysql,Php,Mysql,我发布了一个JSON数组,如: [ { "id": 1 },{ "id": 2},{ "id": 3 },{ "id": 4 } ] 在$data=$array->myarray部分出现了所有问题,我得到: Notice: Trying to get property of non-object on line 12. 当我搜索错误并阅读错误信息时,我觉得没有办法解决问题。那里到底发生了什么 这是我的密码: require('dbConnect.php'); $test = $_POST

我发布了一个JSON数组,如:

[ { "id": 1 },{ "id": 2},{ "id": 3 },{ "id": 4 } ]
$data=$array->myarray
部分出现了所有问题,我得到:

Notice: Trying to get property of non-object on line 12. 
当我搜索错误并阅读错误信息时,我觉得没有办法解决问题。那里到底发生了什么

这是我的密码:

require('dbConnect.php');

$test = $_POST['jsonarray'];

$array = json_decode($test);

$data = $array->myarray;

$id_list = implode(",", array_map(function ($val) { return (int) $val->id; }, $data));

mysqli_query("DELETE FROM contacts WHERE id NOT IN ($id_list)");



echo $test;

//echo $id_list; 

//var_dump $obj;
print_r($array);
print_r($data);

我还认为mysqli_查询只需要一个参数,如果服务器连接详细信息已知,是否正确?

可以访问数组数组,如:

$array[0]["id"]; //using the json supplied
mysqli_查询需要连接对象作为它的第一个参数,或者您可以使用$conn->mysqli_查询($query)调用它 请参阅mysqli文档,网址为

我还认为,如果已经知道服务器连接详细信息,那么mysqli\u查询只需要一个参数,对吗

不,这是不对的。过时的
mysql
扩展就是这样工作的——connection参数是last,是可选的,默认为最近打开的连接。但是
mysqli
不是这样工作的。connection参数是第一个,它是必需的。应该如此

mysqli_query($conn, "DELETE FROM contacts WHERE id NOT IN ($id_list)");

$conn
替换为您在
dbConnect.php

中设置的任何变量。感谢劳伦斯·切隆的评论和巴尔马的回答,我这样解决了我的问题(我还使我的MySql更安全):


如果它是数组,为什么要将其视为对象?第二个问题你应该查一下手册。没错!那个神秘的myarray密钥来自哪里?我的代码基于这个问题,这个问题在某种程度上非常有用:。对不起,我的php不如你的好。^^假设你按照这个答案的其余部分,用json解决这个问题,只需执行
$data=json\u decode($test)
并去掉
$data=$array->myarray行,在执行任何查询之前,您还应该检查json是否有效。SQL很好。问题是您遗漏了
mysqli\u query()
的第一个参数。它是一个对象数组。
$test = $_POST['jsonarray'];

$data = json_decode($test);

$id_list = implode(",", array_map(function ($val) { return (int) $val->id; }, $data));

//mysqli_query($con, "DELETE FROM test_table WHERE name NOT IN ($id_list)");

$query5 = "DELETE FROM test_table WHERE name NOT IN ($id_list)";
                $stmt5 = $con->prepare($query5) or die(mysqli_error($con));
                $stmt5->execute() or die ("MySQLi-stmt execute failed ".$stmt4->error);
                $stmt5->close();