首页 > 解决方案 > PHP/MySQL 请求:我不知道为什么 CREATE 不起作用

问题描述

我尝试为自己的 MySQL 数据库制作自定义 API。我有两张桌子:

CREATE TABLE `heroes` (
  `id` int(11) NOT NULL,
  `name` varchar(200) NOT NULL,
  `realname` varchar(200) NOT NULL,
  `rating` int(11) NOT NULL,
  `teamaffiliation` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `remarks` (
  `id` int(11) NOT NULL,
  `author` varchar(256) NOT NULL,
  `comment` varchar(10000) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

两者id都是PRIMARY KEYAUTO_INCREMENT

我的 API 执行基本的 CRUD 操作,读取工作正常,但remarks表上的创建有问题,我没有找到我的错误

DbOperation.php:

function createHero($name, $realname, $rating, $teamaffiliation){
        $stmt = $this->con->prepare("INSERT INTO heroes (name, realname, rating, teamaffiliation) VALUES (?, ?, ?, ?)");
        $stmt->bind_param("ssis", $name, $realname, $rating, $teamaffiliation);
        if($stmt->execute())
            return true; 
        return false; 
    }

    function createRemark($author, $comment){
        $stmt = $this->con->prepare("INSERT INTO remarks (author, comment) VALUES (?, ?)");
        $stmt->bind_param("ssis", $author, $comment);
        if($stmt->execute())
            return true; 
        return false; 
    }

    function getHeroes(){
        $stmt = $this->con->prepare("SELECT id, name, realname, rating, teamaffiliation FROM heroes");
        $stmt->execute();
        $stmt->bind_result($id, $name, $realname, $rating, $teamaffiliation);

        $heroes = array(); 

        while($stmt->fetch()){
            $hero  = array();
            $hero['id'] = $id; 
            $hero['name'] = $name; 
            $hero['realname'] = $realname; 
            $hero['rating'] = $rating; 
            $hero['teamaffiliation'] = $teamaffiliation; 

            array_push($heroes, $hero); 
        }

        return $heroes; 
    }


    function getRemarks(){
        $stmt = $this->con->prepare("SELECT id, author, comment FROM remarks");
        $stmt->execute();
        $stmt->bind_result($id, $author, $comment);

        $remarks = array(); 

        while($stmt->fetch()){
            $remark = array();
            $remark['id'] = $id; 
            $remark['author'] = $author; 
            $remark['comment'] = $comment; 

            array_push($remarks, $remark); 
        }

        return $remarks; 
    }

api.php:

case 'createhero':
                isTheseParametersAvailable(array('name','realname','rating','teamaffiliation'));

                $db = new DbOperation();

                $result = $db->createHero(
                    $_POST['name'],
                    $_POST['realname'],
                    $_POST['rating'],
                    $_POST['teamaffiliation']
                );

                if($result){
                    $response['error'] = false; 

                    $response['message'] = 'Hero addedd successfully';
                    $response['heroes'] = $db->getHeroes();
                }else{

                    $response['error'] = true; 

                    $response['message'] = 'Some error occurred please try again';
                }

            break;

case 'createremark':
                isTheseParametersAvailable(array('author','comment'));

                $db = new DbOperation();

                $result = $db->createRemark(
                    $_POST['author'],
                    $_POST['comment']
                );

                if($result){

                    $response['error'] = false; 

                    $response['message'] = 'Remark added successfully';

                    $response['remarks'] = $db->getRemarks();
                }else{

                    $response['error'] = true; 

                    //and we have the error message
                    $response['message'] = 'Some error occured, please try again';
                }

            break; 

case 'getheroes':
                $db = new DbOperation();
                $response['error'] = false; 
                $response['message'] = 'Request successfully completed';
                $response['heroes'] = $db->getHeroes();
            break;

case 'getremarks':
                $db = new DbOperation();
                $response['error'] = false; 
                $response['message'] = 'Request successfully completed';
                $response['remarks'] = $db->getRemarks();
            break; 

唯一不起作用的部分是创建评论的部分......

它向我展示了:{"error":true,"message":"Some error occured, please try again"}

而且我没发现有什么问题...

标签: phpmysqlmysqliprepared-statement

解决方案


推荐阅读