【发布时间】:2016-06-02 21:21:56
【问题描述】:
我有这个 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 在 php 上解码 JSON
if (isset($_POST["planet"]{
$planet = JSON_decode($_POST["planet"]);
}
然后我尝试使用 PDO 进行 INSERT
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 />
285 是第一次 BIND 尝试。
【问题讨论】:
-
您的 json 对象引用
location并且您在 php.ini 中引用loc。查看var_dump($planet)以检查您要插入/绑定的内容。 -
这个问题的错字。无论如何,这不是错误,因为尝试绑定第一个参数(“所有者”)时代码中断
-
您能否发布
var_dump($plant)的输出 - 您仍然可能引用错误,因此绑定失败。 -
查看 OP 编辑,我添加了它。
-
如果要将其用作关联数组,则需要将 ,true 添加到您的
JSON_decode调用中。见here
标签: javascript php mysql pdo