【问题标题】:Unable to Get Response Header from Php PDO on Google App Engine无法从 Google App Engine 上的 Php PDO 获取响应标头
【发布时间】:2015-06-05 01:53:32
【问题描述】:

在我将一些数据插入数据库后,我正试图发回最后插入的 id。我已成功将数据输入数据库,但没有发回响应数据。我正在使用 Php PDO,它托管在 Google App Engine 上,并且我的标头在 dbconnect.php 文件中设置为 application/json。我需要添加什么才能使其成功发回响应数据。

<?php
    require('dbconnect.php');
    $statement=$con->prepare('INSERT INTO customers (fname, lname) VALUES (:fname,:lname)');
    $statement->execute(array(':fname' => $_POST['fname'], ':lname' => $_POST['lname'] ));
    $orderId = $statement->lastInsertId();
    $json = $json_encode($orderId);
    echo $json;
    $con = null;
?>

【问题讨论】:

  • 将错误报告添加到文件顶部,紧跟在打开 PHP 标记之后,例如 &lt;?php error_reporting(E_ALL); ini_set('display_errors', 1);,然后是其余代码,以查看它是否产生任何结果。
  • 我得到了Notice: Undefined index: fnameNotice: Undefined index: lnameFatal error: Call to undefined method PDOStatement::lastInsertId()
  • 你去。对于未发布的表单元素,您没有名称属性,并确保您也使用 POST 方法。反过来,更多来自 PDO 的错误。
  • 为你的表单元素添加name="lname"name="fname",你可能会开始看到magic发生了;-)
  • 我不确定我是否理解。它成功地将数据插入到数据库中。我也在使用 POST 方法。我需要为名称属性做什么?谢谢

标签: php google-app-engine http pdo


【解决方案1】:

我收到了通知:未定义索引:fname 和通知:未定义索引:lname 和致命错误:调用未定义方法 PDOStatement::lastInsertId() – Moustache_Me_A_Question 10 分钟前

表单元素没有名称属性。

因此您需要将它们添加到您的元素中。

下面是一个示例表单,您可以根据自己的情况:

<form action="" method="post">
    First name:
    <input type="text" name="fname">
<br>
    Last name:
    <input type="text" name="lname">
<br>
    <input type="submit" name="submit" value="Submit">
</form>

这就是您收到未定义索引通知的原因。


$json = $json_encode($orderId); 应该读作$json = json_encode($orderId); - json_encode() 不应该是变量,而是函数本身。

还有:

$orderId = $statement->lastInsertId(); 

$orderId = $con->lastInsertId();

这就是您收到此消息的原因:

致命错误:调用未定义的方法 PDOStatement::lastInsertId()

  • lastInsertId() 是 PDO 类的方法,而不是 PDOStatement 类。

我在谷歌搜索错误时在 Bi​​ll Karwin 的回答中发现:

【讨论】:

  • 我正在从 AngularJS 发送一个 json 对象` $http({ method: "POST", url: "example.com/postdata", data: $scope.formData })...`。 $scope.formData 是$scope.formData = { fname:$scope.user.firstName, lname:$scope.user.lastName};
  • @Moustache_Me_A_Question 而不是$orderId = $statement-&gt;lastInsertId(); 试试$orderId = $con-&gt;lastInsertId();
  • 感谢您的帮助。一旦我将$json_encode(...) 更改为json_encode(..),它就修复了错误,并将标题内容类型从 application/json 更改为默认值。感谢您的帮助@Fred -ii-
  • 你是对的 $con-&gt;lastInsertId() 。谢谢!
  • 当然是老天爷。我应该发现大声笑@Moustache_Me_A_Question 很好地抓住了这一点:) 介意我把它添加到我的答案中让其他人看到吗?不客气。
猜你喜欢
  • 2013-08-11
  • 1970-01-01
  • 2014-05-08
  • 2016-01-22
  • 1970-01-01
  • 2011-04-08
  • 2013-02-23
  • 2020-01-22
  • 1970-01-01
相关资源
最近更新 更多