Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.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
Javascript 将JS对象转换为PHP,然后通过PDO插入_Javascript_Php_Mysql_Pdo - Fatal编程技术网

Javascript 将JS对象转换为PHP,然后通过PDO插入

Javascript 将JS对象转换为PHP,然后通过PDO插入,javascript,php,mysql,pdo,Javascript,Php,Mysql,Pdo,我有一个JS对象: var planet = { owner: 4, name: "Mars", loc: [3, 4], level: 4, baseIncome: 1000 } 我使用ajax将此对象传输到PHP postPlanets: function(planet){ planet = JSON.stringify(planet); $.ajax({ type: "POST", url: "postGameData.php",

我有一个JS对象:

var planet = {
owner: 4,
name: "Mars",
loc: [3, 4],
level: 4,
baseIncome: 1000
}
我使用ajax将此对象传输到PHP

postPlanets: function(planet){

    planet = JSON.stringify(planet);

    $.ajax({
        type: "POST",
        url: "postGameData.php",
        datatype: "json",
        data: {planet: planet}, 
        error: ajax.error,
        success: ajax.success,
    });
我在php上通过

if (isset($_POST["planet"]{
    $planet = JSON_decode($_POST["planet"]);
}
然后我尝试使用PDO进行插入

public function insertPlanet($planet){

    $stmt = $this->connection->prepare("
        INSERT INTO planets
            (owner, name, x, y, level, baseIncome)
        VALUES
            (:owner, :name, :x, :y, :level, :baseIncome)
    ");

    $stmt->bindParam(":owner", $planet["owner"]);
    $stmt->bindParam(":name", $planet["name"]);
    $stmt->bindParam(":x", $planet["loc"][0]);
    $stmt->bindParam(":y", $planet["loc"][1]);
    $stmt->bindParam(":level", $planet["level"]);
    $stmt->bindParam(":baseIncome", $planet["baseIncome"]);

    $stmt->execute();

    if ($stmt->errorCode() == 0){
        return true;
    }
    else {
        return false;
    }
}
但它不起作用。 我知道一旦它试图绑定PDO上的第一个参数,它就会崩溃,但我不知道如何调试准备好的语句

我做错了什么

错误返回

object(stdClass)#3 (5) {
  ["owner"]=>
  string(3) "sdf"
  ["name"]=>
  string(3) "sdf"
  ["loc"]=>
  array(2) {
    [0]=>
    int(2)
    [1]=>
    int(4)
  }
  ["level"]=>
  string(3) "sdf"
  ["baseIncome"]=>
  string(1) "f"
}
<br />
<b>Fatal error</b>:  Cannot use object of type stdClass as array in <b>D:\SecureWAMP_Portable\htdocs\projectX\DBManager.php</b> on line <b>285</b><br />
对象(stdClass)#3(5){
[“所有者”]=>
字符串(3)“sdf”
[“名称”]=>
字符串(3)“sdf”
[“loc”]=>
阵列(2){
[0]=>
int(2)
[1]=>
int(4)
}
[“级别”]=>
字符串(3)“sdf”
[“基本收入”]=>
字符串(1)“f”
}

致命错误:无法在第285行的D:\SecureWAMP\u-Portable\htdocs\projectX\DBManager.php中将stdClass类型的对象用作数组

285是第一次尝试绑定。

如果它是object,我想你可以称之为like
$planet->owner
而不是array$planet['owner'.

如果它是object,我想你可以称之为like
$planet->owner
而不是array$planet['owner'.

你已经将数据解码成了
stdObject
类型,让它像下面这样:

if (isset($_POST["planet"]{
    $planet = JSON_decode($_POST["planet"], true);
}

这样就可以将对象作为数组
stdObject
意味着您可以访问您的数据,如:
$planet->owner
而不是
$planet[“owner”]
。这就是
json_decode
的第二个
true
参数的用途。

您已将数据解码为
stdObject
类型,如下所示:

if (isset($_POST["planet"]{
    $planet = JSON_decode($_POST["planet"], true);
}

这样就可以将对象作为数组
stdObject
意味着您可以访问您的数据,如:
$planet->owner
而不是
$planet[“owner”]
。这就是用于
json_decode
的第二个
true
参数的作用。

您的json对象引用
位置
,您在php中引用
loc
。查看
var\u dump($planet)
检查您要为这个问题插入什么/bind.typo。无论如何,这不是错误,因为在尝试绑定第一个参数(“所有者”)时代码会中断。您可以发布
var\u dump($plant)
的输出吗?您仍然可能引用错误,因此绑定失败。请参阅OP edit,我添加了它。您需要添加,如果要将其用作关联数组,则调用
JSON\u decode
时为true。在php中查看json对象引用
location
,并引用
loc
。查看
var\u dump($planet)
检查您要为这个问题插入什么/bind.typo。无论如何,这不是错误,因为在尝试绑定第一个参数(“所有者”)时代码会中断。您可以发布
var\u dump($plant)
的输出吗?您仍然可能引用错误,因此绑定失败。请参阅OP edit,我添加了它。您需要添加,如果要将其用作关联数组,则调用
JSON\u decode
时为true。见鬼,这么大的错误浪费了这么多时间。谢谢。天哪,这么大的错误浪费了这么多时间。谢谢,谢谢。另一个人更快,但我给你+1。谢谢没问题,不过我的解决方案不需要修改任何代码就可以工作。谢谢。另一个人更快,但我给你+1。谢谢没问题,不过我的解决方案不需要修改任何代码就可以工作。