PHP - 致命错误:未捕获的 PDOException:SQLSTATE[HY093]:无效的参数号

问题描述 投票:0回答:1

我正在练习使用 PHP 和 mySQL 连接 React 到数据库

我正在使用教程视频进行操作,一切都很好,但是当我尝试执行我的代码时 突然遇到一个错误,自己无法解决

我正在尝试获取文本输入的值并将其保存在数据库中 (抱歉,如果我写得很奇怪,我不是以英语为母语的人)

这是连接代码:

<?php 
    class DbConnect {
        private $server = 'localhost';
        private $dbname = 'react-crud-app';
        private $user = 'root';
        private $pass = '';

        public function connect() {
            try {
                $conn = new PDO('mysql:host=' .$this->server .';dbname=' . $this->dbname, $this->user, $this->pass);
                $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                return $conn;
            } catch (\Exception $e) {
                echo "Database Error: " . $e->getMessage();
            }
        }
    }
 ?>

这是从输入中获取文本并将其放入数据库的索引代码:

<?php
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: *");

include ('./DbConnect.php');
$objDb = new DbConnect;
$conn = $objDb->connect();

$method = $_SERVER['REQUEST_METHOD'];

switch($method){
    case "POST";
        $user = json_decode(file_get_contents('php://input'));
        $sql = "INSERT INTO users(id, name, email, mobile, created_at) VALUES(null ,:name, :email, :mobile, :created_at)";
        $stm = $conn->prepare($sql);
        $created_at = date('Y-M-D');
        $stm->bindParam(':name', $user->name);
        $stm->bindParam(':email', $user->email);
        $stm->bindParam(':mobile', $user->mobile);
        $stm->bindParam(':created_at', $created_at);

        if($stm->execute()){ //error shows itself right here if it helps
            $response = ['status'=> 1 , 'message'=>'successful'];
        }else{
            $response = ['status'=> 0 , 'message'=>'was NOT successful'];
        }
        echo json_encode($response);
        break;
    }

抱歉,如果它不是一个好看的代码:(

我尝试将表项(名称,电子邮件...)作为数组执行,但再次出现相同的错误。

php fatal-error
1个回答
0
投票

switch 语句中“POST”case 后面的分号(;)应该是冒号(:),以正确定义 case 块。像这样:

switch($method){
case "POST":

使用bindParam绑定参数时,应该将值作为引用传递。在您的代码中,您直接传递值而不是引用。像这样:

$stm->bindParam(':name', $user->name, PDO::PARAM_STR);

如果您有其他错误,请发布,以便我们更好地调试。

© www.soinside.com 2019 - 2024. All rights reserved.