【问题标题】:What am I doing wrong with the php://input function?我在 php://input 函数上做错了什么?
【发布时间】:2019-11-13 11:15:06
【问题描述】:

我目前的问题是我必须创建一个连接到 MySQL 数据库的后端 API。我的同学找到了一个关于如何创建的教程,但它使用了我不熟悉的东西,我也找不到很多文档。

我想知道它是如何工作的,我将在教程中包含一段代码块来使用它。我希望你能帮助我。

到目前为止,我已经尝试过谷歌搜索(没有真正的结果)并询问我的老师,但他们似乎没有任何答案可以帮助我。根据我的发现,就读取/输出而言,它是一种 JSON 字符串。

从数据库中删除一行的函数,如您所见,它使用了似乎是 JSON API 调用的方法。 (p.Categorie_ID)

  public function delete(){
        $query = "DELETE FROM categorie WHERE Categorie_ID= p.Categorie_ID";

        $stmt = $this->connection->prepare($query);

        $stmt->execute();

        return $stmt;
    }
$p  = array(
      "Object_ID" => $Object_ID,
      "Object_naam" => $Object_naam,
      "Object_merk" => $Object_merk,
      "Object_type" => $Object_type,
      "Object_status" => $Object_status,
      "Categorie_ID" => $Categorie_ID
    );
    array_push($Objects["body"], $p);
  }

在上面我发布了我认为是原始代码块中的“p”变量。

<br />
<b>Notice</b>:  Trying to get property of non-object in <b>C:\xampp\htdocs\PHP\PHP API_Categories\entities\Categories\delete.php</b> on line <b>21</b><br />
object(Categories)#3 (4) {
  ["connection":"Categories":private]=>
  object(PDO)#1 (0) {
  }
  ["table_name":"Categories":private]=>
  string(10) "Categories"
  ["Categorie_ID"]=>
  NULL
  ["Categorie_naam"]=>
  NULL
}
NULL
{"message": "category was deleted."}

这是我运行/打开文件时输出的内容。删除时确实会给出消息;但所有数据都返回为 NULL。我在这里俯瞰什么?

我希望该函数删除提到的表(必须查看哪个表),但它没有执行或返回任何内容,而它应该这样做。

(注意:如果您想阅读我最初尝试做的事情,可以在这里找到完整的源代码:https://www.techiediaries.com/php-rest-api/

【问题讨论】:

  • 如果你有Categorie_ID= p.Categorie_ID,它会期望p 是一个你没有定义的表别名。可能想要Categorie_ID= :CategorieID 然后execute(['CategorieID' =&gt; $id]); - 将$id 设置为您要删除的那个。
  • 我翻阅了另一个文件 (read.php) 并发现了我刚才添加到我的帖子中的假定“p”变量
  • 我在您提供的示例中找不到删除函数的编写位置。我猜您已经尝试基于现有的 SELECT 示例创建类似的东西,并且您对表别名感到困惑。你需要按照奈杰尔的建议去做。定义一个参数并将其传递给执行。 phpdelusions.net/pdo#dml
  • 在php中,变量名以$开头,如果你想在字符串中使用变量,查看string parsing文档。并请编辑标题,这与问题完全无关。
  • 我不知道为什么需要修复标题,我只是添加了显示该页面打印出的错误的代码块。

标签: php input


【解决方案1】:

您正在正确读取来自php://input 的数据。问题在于您的 SQL 查询。要从 $p 数组传递参数,您需要将参数插入查询并绑定数据。您还需要将数组作为参数发送给函数。

// this function takes in a parameter $p 
public function delete(string $Categorie_ID) {
    $query = "DELETE FROM categorie WHERE Categorie_ID = ?";
    $stmt = $this->connection->prepare($query);
    // Pass an element from $p to the execute function to replace the ? placeholder
    $stmt->execute([
        $Categorie_ID
    ]);

    // return $stmt; // there is nothing to return from delete action
}

然后你可以像这样调用函数:

$yourObj->delete($p['Categorie_ID']); // pass the category from the array as an argument

【讨论】:

    猜你喜欢
    • 2015-11-19
    • 2018-12-31
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    • 2010-10-23
    • 1970-01-01
    相关资源
    最近更新 更多