【问题标题】:Can't perform a PHP POST request on mysql database无法在 mysql 数据库上执行 PHP POST 请求
【发布时间】:2021-06-25 20:07:53
【问题描述】:

我正在努力在 php 中创建我的第一个 API,并且我在使用简单的 POST 请求时遇到了一些问题。我几乎在所有地方都在搜索我的代码的一些替代方案,但它似乎没问题。你们能帮我看看最后一次吗?谢谢!

方法:

function create_msg(){

    // query to insert record
    $query = "INSERT INTO
                " . $this->table_name . "
            SET
                msg_key=:msg_key, msg_id=:msg_id, msg_author=:msg_author, msg_txt=:msg_txt";
  
    // prepare query
    $stmt = $this->conn->prepare($query);
  
    // sanitize
    $this->msg_key=htmlspecialchars(strip_tags($this->msg_key));
    $this->msg_id=htmlspecialchars(strip_tags($this->msg_id));
    $this->msg_author=htmlspecialchars(strip_tags($this->msg_author));
    $this->msg_txt=htmlspecialchars(strip_tags($this->msg_txt));
  
    // bind values
    $stmt->bindParam(":msg_key", $this->msg_key);
    $stmt->bindParam(":msg_id", $this->msg_id);
    $stmt->bindParam(":msg_author", $this->msg_author);
    $stmt->bindParam(":msg_txt", $this->msg_txt);

  
    // execute query
    if($stmt->execute()){
        return true;
    }
  
    return false;
      
}

创建.php:

<?php
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: POST");
header("Access-Control-Max-Age: 3600");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");

include_once '../config/database.php';
include_once '../models/msg.php';

$database = new Database();
$db = $database->getConnection();

$item = new msg($db);

$data = json_decode(file_get_contents("php://input"));

$item->msg_key = $data->msg_key;
$item->msg_id = $data->msg_id;
$item->msg_author = $data->msg_author;
$item->msg_txt = $data->msg_txt;
var_dump($data);

if($item->create_msg()){
    echo 'OK';
} else{
    echo 'Not OK';
}
?>

【问题讨论】:

  • var_dump($data); 是否显示预期结果?
  • 也许您应该查看文档以了解 htmlspecialchars()strip_tags() 的实际作用。提示:这绝对与数据库无关。
  • @miken32 每个网站甚至在堆栈中都使用 htmlspecialchars() 清理数据并使用 strip_tags() 删除任何 html 标签
  • @Barmar 实际上是的,它似乎充满了信息。 object(stdClass)#4 (4) { [ "msg_key" ]=&gt; string(9) "123456789" [ "msg_id" ]=&gt; string(6) "A00006" [ "msg_author" ]=&gt; string(6) "sandro" [ "msg_txt" ]=&gt; string(3) "lol" }
  • 你在哪里设置$item-&gt;table_name

标签: php api rest post


【解决方案1】:

好的,所以我设法用 config/database.php 中的这段代码解决了

<?php
class Database{
    private $host = 'mysql:host=localhost;dbname=my_touchy';
    private $username = 'touchy';
    private $password = '';


    public function getConnection() {
        $conn = new PDO($this->host, $this->username, $this->password);
        $conn->setAttribute( PDO::ATTR_PERSISTENT, TRUE );
        $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
        return $conn;
    }
}

?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-28
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多